Patchwork [06/17] powerpc: Add transactional memory paca scratch register to show_regs

login
register
mail settings
Submitter Michael Neuling
Date Feb. 13, 2013, 4:31 a.m.
Message ID <1360729895-304-7-git-send-email-mikey@neuling.org>
Download mbox | patch
Permalink /patch/220030/
State Superseded
Headers show

Comments

Michael Neuling - Feb. 13, 2013, 4:31 a.m.
Add transactional memory paca scratch register to show_regs.  This is useful
for debugging.

Signed-off-by: Matt Evans <matt@ozlabs.org>
Signed-off-by: Michael Neuling <mikey@neuling.org>
---
 arch/powerpc/include/asm/paca.h   |    1 +
 arch/powerpc/kernel/asm-offsets.c |    1 +
 arch/powerpc/kernel/entry_64.S    |    4 ++++
 arch/powerpc/kernel/process.c     |    3 +++
 4 files changed, 9 insertions(+)
Kumar Gala - Feb. 13, 2013, 1:52 p.m.
On Feb 12, 2013, at 10:31 PM, Michael Neuling wrote:

> Add transactional memory paca scratch register to show_regs.  This is useful
> for debugging.
> 
> Signed-off-by: Matt Evans <matt@ozlabs.org>
> Signed-off-by: Michael Neuling <mikey@neuling.org>
> ---
> arch/powerpc/include/asm/paca.h   |    1 +
> arch/powerpc/kernel/asm-offsets.c |    1 +
> arch/powerpc/kernel/entry_64.S    |    4 ++++
> arch/powerpc/kernel/process.c     |    3 +++
> 4 files changed, 9 insertions(+)
> 
> diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h
> index c47d687..07e9851 100644
> --- a/arch/powerpc/include/asm/paca.h
> +++ b/arch/powerpc/include/asm/paca.h
> @@ -137,6 +137,7 @@ struct paca_struct {
> 	u8 irq_work_pending;		/* IRQ_WORK interrupt while soft-disable */
> 	u8 nap_state_lost;		/* NV GPR values lost in power7_idle */
> 	u64 sprg3;			/* Saved user-visible sprg */

#ifdef CONFIG_PPC_TRANSACTIONAL_MEM

> +	u64 tm_scratch;                 /* TM scratch area for reclaim */

#endif

> 
> #ifdef CONFIG_PPC_POWERNV
> 	/* Pointer to OPAL machine check event structure set by the
> diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
> index b67e4c3..f9654b6 100644
> --- a/arch/powerpc/kernel/asm-offsets.c
> +++ b/arch/powerpc/kernel/asm-offsets.c
> @@ -126,6 +126,7 @@ int main(void)
> 	DEFINE(THREAD_TAR, offsetof(struct thread_struct, tar));
> #endif
> #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
> +	DEFINE(PACATMSCRATCH, offsetof(struct paca_struct, tm_scratch));
> 	DEFINE(THREAD_TM_TFHAR, offsetof(struct thread_struct, tm_tfhar));
> 	DEFINE(THREAD_TM_TEXASR, offsetof(struct thread_struct, tm_texasr));
> 	DEFINE(THREAD_TM_TFIAR, offsetof(struct thread_struct, tm_tfiar));
> diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
> index 9ae8451..612ea13 100644
> --- a/arch/powerpc/kernel/entry_64.S
> +++ b/arch/powerpc/kernel/entry_64.S
> @@ -785,6 +785,10 @@ fast_exception_return:
> 	andc	r4,r4,r0	 /* r0 contains MSR_RI here */
> 	mtmsrd	r4,1
> 
> +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
> +	/* TM debug */
> +	std	r3, PACATMSCRATCH(r13) /* Stash returned-to MSR */
> +#endif
> 	/*
> 	 * r13 is our per cpu area, only restore it if we are returning to
> 	 * userspace the value stored in the stack frame may belong to
> diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
> index b0a0321..1cc4053 100644
> --- a/arch/powerpc/kernel/process.c
> +++ b/arch/powerpc/kernel/process.c
> @@ -754,6 +754,9 @@ void show_regs(struct pt_regs * regs)
> 	printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip);
> 	printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link);
> #endif
> +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
> +	printk("PACATMSCRATCH [%llx]\n", get_paca()->tm_scratch);
> +#endif
> 	show_stack(current, (unsigned long *) regs->gpr[1]);
> 	if (!user_mode(regs))
> 		show_instructions(regs);
> -- 
> 1.7.10.4
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
Michael Neuling - Feb. 14, 2013, 1:53 a.m.
Kumar Gala <galak@kernel.crashing.org> wrote:

> 
> On Feb 12, 2013, at 10:31 PM, Michael Neuling wrote:
> 
> > Add transactional memory paca scratch register to show_regs.  This is useful
> > for debugging.
> > 
> > Signed-off-by: Matt Evans <matt@ozlabs.org>
> > Signed-off-by: Michael Neuling <mikey@neuling.org>
> > ---
> > arch/powerpc/include/asm/paca.h   |    1 +
> > arch/powerpc/kernel/asm-offsets.c |    1 +
> > arch/powerpc/kernel/entry_64.S    |    4 ++++
> > arch/powerpc/kernel/process.c     |    3 +++
> > 4 files changed, 9 insertions(+)
> > 
> > diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h
> > index c47d687..07e9851 100644
> > --- a/arch/powerpc/include/asm/paca.h
> > +++ b/arch/powerpc/include/asm/paca.h
> > @@ -137,6 +137,7 @@ struct paca_struct {
> > 	u8 irq_work_pending;		/* IRQ_WORK interrupt while soft-disable */
> > 	u8 nap_state_lost;		/* NV GPR values lost in power7_idle */
> > 	u64 sprg3;			/* Saved user-visible sprg */
> 
> #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
> 
> > +	u64 tm_scratch;                 /* TM scratch area for reclaim */
> 
> #endif

Yep.. thanks again.

Mikey

Patch

diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h
index c47d687..07e9851 100644
--- a/arch/powerpc/include/asm/paca.h
+++ b/arch/powerpc/include/asm/paca.h
@@ -137,6 +137,7 @@  struct paca_struct {
 	u8 irq_work_pending;		/* IRQ_WORK interrupt while soft-disable */
 	u8 nap_state_lost;		/* NV GPR values lost in power7_idle */
 	u64 sprg3;			/* Saved user-visible sprg */
+	u64 tm_scratch;                 /* TM scratch area for reclaim */
 
 #ifdef CONFIG_PPC_POWERNV
 	/* Pointer to OPAL machine check event structure set by the
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c
index b67e4c3..f9654b6 100644
--- a/arch/powerpc/kernel/asm-offsets.c
+++ b/arch/powerpc/kernel/asm-offsets.c
@@ -126,6 +126,7 @@  int main(void)
 	DEFINE(THREAD_TAR, offsetof(struct thread_struct, tar));
 #endif
 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+	DEFINE(PACATMSCRATCH, offsetof(struct paca_struct, tm_scratch));
 	DEFINE(THREAD_TM_TFHAR, offsetof(struct thread_struct, tm_tfhar));
 	DEFINE(THREAD_TM_TEXASR, offsetof(struct thread_struct, tm_texasr));
 	DEFINE(THREAD_TM_TFIAR, offsetof(struct thread_struct, tm_tfiar));
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 9ae8451..612ea13 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -785,6 +785,10 @@  fast_exception_return:
 	andc	r4,r4,r0	 /* r0 contains MSR_RI here */
 	mtmsrd	r4,1
 
+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+	/* TM debug */
+	std	r3, PACATMSCRATCH(r13) /* Stash returned-to MSR */
+#endif
 	/*
 	 * r13 is our per cpu area, only restore it if we are returning to
 	 * userspace the value stored in the stack frame may belong to
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index b0a0321..1cc4053 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -754,6 +754,9 @@  void show_regs(struct pt_regs * regs)
 	printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip);
 	printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link);
 #endif
+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+	printk("PACATMSCRATCH [%llx]\n", get_paca()->tm_scratch);
+#endif
 	show_stack(current, (unsigned long *) regs->gpr[1]);
 	if (!user_mode(regs))
 		show_instructions(regs);