aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/traps.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r--arch/powerpc/kernel/traps.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 3c668078e524..9b352bd0a460 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -55,9 +55,6 @@
55 55
56#ifdef CONFIG_PPC64 /* XXX */ 56#ifdef CONFIG_PPC64 /* XXX */
57#define _IO_BASE pci_io_base 57#define _IO_BASE pci_io_base
58#ifdef CONFIG_KEXEC
59cpumask_t cpus_in_sr = CPU_MASK_NONE;
60#endif
61#endif 58#endif
62 59
63#ifdef CONFIG_DEBUGGER 60#ifdef CONFIG_DEBUGGER
@@ -150,13 +147,9 @@ int die(const char *str, struct pt_regs *regs, long err)
150 if (in_interrupt()) 147 if (in_interrupt())
151 panic("Fatal exception in interrupt"); 148 panic("Fatal exception in interrupt");
152 149
153 if (panic_on_oops) { 150 if (panic_on_oops)
154#ifdef CONFIG_PPC64
155 printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n");
156 ssleep(5);
157#endif
158 panic("Fatal exception"); 151 panic("Fatal exception");
159 } 152
160 do_exit(err); 153 do_exit(err);
161 154
162 return 0; 155 return 0;
@@ -215,6 +208,19 @@ void system_reset_exception(struct pt_regs *regs)
215 208
216 die("System Reset", regs, SIGABRT); 209 die("System Reset", regs, SIGABRT);
217 210
211 /*
212 * Some CPUs when released from the debugger will execute this path.
213 * These CPUs entered the debugger via a soft-reset. If the CPU was
214 * hung before entering the debugger it will return to the hung
215 * state when exiting this function. This causes a problem in
216 * kdump since the hung CPU(s) will not respond to the IPI sent
217 * from kdump. To prevent the problem we call crash_kexec_secondary()
218 * here. If a kdump had not been initiated or we exit the debugger
219 * with the "exit and recover" command (x) crash_kexec_secondary()
220 * will return after 5ms and the CPU returns to its previous state.
221 */
222 crash_kexec_secondary(regs);
223
218 /* Must die if the interrupt is not recoverable */ 224 /* Must die if the interrupt is not recoverable */
219 if (!(regs->msr & MSR_RI)) 225 if (!(regs->msr & MSR_RI))
220 panic("Unrecoverable System Reset"); 226 panic("Unrecoverable System Reset");
@@ -579,14 +585,14 @@ static void parse_fpe(struct pt_regs *regs)
579#define INST_MFSPR_PVR_MASK 0xfc1fffff 585#define INST_MFSPR_PVR_MASK 0xfc1fffff
580 586
581#define INST_DCBA 0x7c0005ec 587#define INST_DCBA 0x7c0005ec
582#define INST_DCBA_MASK 0x7c0007fe 588#define INST_DCBA_MASK 0xfc0007fe
583 589
584#define INST_MCRXR 0x7c000400 590#define INST_MCRXR 0x7c000400
585#define INST_MCRXR_MASK 0x7c0007fe 591#define INST_MCRXR_MASK 0xfc0007fe
586 592
587#define INST_STRING 0x7c00042a 593#define INST_STRING 0x7c00042a
588#define INST_STRING_MASK 0x7c0007fe 594#define INST_STRING_MASK 0xfc0007fe
589#define INST_STRING_GEN_MASK 0x7c00067e 595#define INST_STRING_GEN_MASK 0xfc00067e
590#define INST_LSWI 0x7c0004aa 596#define INST_LSWI 0x7c0004aa
591#define INST_LSWX 0x7c00042a 597#define INST_LSWX 0x7c00042a
592#define INST_STSWI 0x7c0005aa 598#define INST_STSWI 0x7c0005aa