diff options
-rw-r--r-- | arch/powerpc/include/asm/paca.h | 3 | ||||
-rw-r--r-- | arch/powerpc/kernel/asm-offsets.c | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/entry_64.S | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/process.c | 3 |
4 files changed, 11 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h index 4b74c6c9d82a..77c91e74b612 100644 --- a/arch/powerpc/include/asm/paca.h +++ b/arch/powerpc/include/asm/paca.h | |||
@@ -137,6 +137,9 @@ struct paca_struct { | |||
137 | u8 irq_work_pending; /* IRQ_WORK interrupt while soft-disable */ | 137 | u8 irq_work_pending; /* IRQ_WORK interrupt while soft-disable */ |
138 | u8 nap_state_lost; /* NV GPR values lost in power7_idle */ | 138 | u8 nap_state_lost; /* NV GPR values lost in power7_idle */ |
139 | u64 sprg3; /* Saved user-visible sprg */ | 139 | u64 sprg3; /* Saved user-visible sprg */ |
140 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
141 | u64 tm_scratch; /* TM scratch area for reclaim */ | ||
142 | #endif | ||
140 | 143 | ||
141 | #ifdef CONFIG_PPC_POWERNV | 144 | #ifdef CONFIG_PPC_POWERNV |
142 | /* Pointer to OPAL machine check event structure set by the | 145 | /* 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 0fdc97496d7c..781190367292 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
@@ -126,6 +126,7 @@ int main(void) | |||
126 | DEFINE(THREAD_TAR, offsetof(struct thread_struct, tar)); | 126 | DEFINE(THREAD_TAR, offsetof(struct thread_struct, tar)); |
127 | #endif | 127 | #endif |
128 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | 128 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM |
129 | DEFINE(PACATMSCRATCH, offsetof(struct paca_struct, tm_scratch)); | ||
129 | DEFINE(THREAD_TM_TFHAR, offsetof(struct thread_struct, tm_tfhar)); | 130 | DEFINE(THREAD_TM_TFHAR, offsetof(struct thread_struct, tm_tfhar)); |
130 | DEFINE(THREAD_TM_TEXASR, offsetof(struct thread_struct, tm_texasr)); | 131 | DEFINE(THREAD_TM_TEXASR, offsetof(struct thread_struct, tm_texasr)); |
131 | DEFINE(THREAD_TM_TFIAR, offsetof(struct thread_struct, tm_tfiar)); | 132 | 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 9ae8451bbc83..612ea130c5d2 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -785,6 +785,10 @@ fast_exception_return: | |||
785 | andc r4,r4,r0 /* r0 contains MSR_RI here */ | 785 | andc r4,r4,r0 /* r0 contains MSR_RI here */ |
786 | mtmsrd r4,1 | 786 | mtmsrd r4,1 |
787 | 787 | ||
788 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
789 | /* TM debug */ | ||
790 | std r3, PACATMSCRATCH(r13) /* Stash returned-to MSR */ | ||
791 | #endif | ||
788 | /* | 792 | /* |
789 | * r13 is our per cpu area, only restore it if we are returning to | 793 | * r13 is our per cpu area, only restore it if we are returning to |
790 | * userspace the value stored in the stack frame may belong to | 794 | * 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 b0a0321e4bb6..1cc40533021b 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -754,6 +754,9 @@ void show_regs(struct pt_regs * regs) | |||
754 | printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip); | 754 | printk("NIP ["REG"] %pS\n", regs->nip, (void *)regs->nip); |
755 | printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link); | 755 | printk("LR ["REG"] %pS\n", regs->link, (void *)regs->link); |
756 | #endif | 756 | #endif |
757 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
758 | printk("PACATMSCRATCH [%llx]\n", get_paca()->tm_scratch); | ||
759 | #endif | ||
757 | show_stack(current, (unsigned long *) regs->gpr[1]); | 760 | show_stack(current, (unsigned long *) regs->gpr[1]); |
758 | if (!user_mode(regs)) | 761 | if (!user_mode(regs)) |
759 | show_instructions(regs); | 762 | show_instructions(regs); |