diff options
Diffstat (limited to 'arch/powerpc/kernel/process.c')
-rw-r--r-- | arch/powerpc/kernel/process.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index d817ab018486..e40707032ac3 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
@@ -647,6 +647,9 @@ void show_regs(struct pt_regs * regs) | |||
647 | printk("MSR: "REG" ", regs->msr); | 647 | printk("MSR: "REG" ", regs->msr); |
648 | printbits(regs->msr, msr_bits); | 648 | printbits(regs->msr, msr_bits); |
649 | printk(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer); | 649 | printk(" CR: %08lx XER: %08lx\n", regs->ccr, regs->xer); |
650 | #ifdef CONFIG_PPC64 | ||
651 | printk("SOFTE: %ld\n", regs->softe); | ||
652 | #endif | ||
650 | trap = TRAP(regs); | 653 | trap = TRAP(regs); |
651 | if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR)) | 654 | if ((regs->trap != 0xc00) && cpu_has_feature(CPU_FTR_CFAR)) |
652 | printk("CFAR: "REG"\n", regs->orig_gpr3); | 655 | printk("CFAR: "REG"\n", regs->orig_gpr3); |
@@ -1220,34 +1223,32 @@ void dump_stack(void) | |||
1220 | EXPORT_SYMBOL(dump_stack); | 1223 | EXPORT_SYMBOL(dump_stack); |
1221 | 1224 | ||
1222 | #ifdef CONFIG_PPC64 | 1225 | #ifdef CONFIG_PPC64 |
1223 | void ppc64_runlatch_on(void) | 1226 | /* Called with hard IRQs off */ |
1227 | void __ppc64_runlatch_on(void) | ||
1224 | { | 1228 | { |
1229 | struct thread_info *ti = current_thread_info(); | ||
1225 | unsigned long ctrl; | 1230 | unsigned long ctrl; |
1226 | 1231 | ||
1227 | if (cpu_has_feature(CPU_FTR_CTRL) && !test_thread_flag(TIF_RUNLATCH)) { | 1232 | ctrl = mfspr(SPRN_CTRLF); |
1228 | HMT_medium(); | 1233 | ctrl |= CTRL_RUNLATCH; |
1229 | 1234 | mtspr(SPRN_CTRLT, ctrl); | |
1230 | ctrl = mfspr(SPRN_CTRLF); | ||
1231 | ctrl |= CTRL_RUNLATCH; | ||
1232 | mtspr(SPRN_CTRLT, ctrl); | ||
1233 | 1235 | ||
1234 | set_thread_flag(TIF_RUNLATCH); | 1236 | ti->local_flags |= TLF_RUNLATCH; |
1235 | } | ||
1236 | } | 1237 | } |
1237 | 1238 | ||
1239 | /* Called with hard IRQs off */ | ||
1238 | void __ppc64_runlatch_off(void) | 1240 | void __ppc64_runlatch_off(void) |
1239 | { | 1241 | { |
1242 | struct thread_info *ti = current_thread_info(); | ||
1240 | unsigned long ctrl; | 1243 | unsigned long ctrl; |
1241 | 1244 | ||
1242 | HMT_medium(); | 1245 | ti->local_flags &= ~TLF_RUNLATCH; |
1243 | |||
1244 | clear_thread_flag(TIF_RUNLATCH); | ||
1245 | 1246 | ||
1246 | ctrl = mfspr(SPRN_CTRLF); | 1247 | ctrl = mfspr(SPRN_CTRLF); |
1247 | ctrl &= ~CTRL_RUNLATCH; | 1248 | ctrl &= ~CTRL_RUNLATCH; |
1248 | mtspr(SPRN_CTRLT, ctrl); | 1249 | mtspr(SPRN_CTRLT, ctrl); |
1249 | } | 1250 | } |
1250 | #endif | 1251 | #endif /* CONFIG_PPC64 */ |
1251 | 1252 | ||
1252 | #if THREAD_SHIFT < PAGE_SHIFT | 1253 | #if THREAD_SHIFT < PAGE_SHIFT |
1253 | 1254 | ||