diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-08-19 17:25:47 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-08-19 17:25:47 -0400 |
commit | 49666145de54b5d6d256442bb1bec03ffae1ac76 (patch) | |
tree | b79bcaabffa18847cab31efdf798dc5740e8d73b /arch/powerpc/kernel/traps.c | |
parent | bcd68373877e74d8ca5039c10dc5d699ba5dc7d0 (diff) | |
parent | 41ace1861a93f12f70ff10026fb1539fea38fcf8 (diff) |
Merge branch 'upstream-fixes' into upstream
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r-- | arch/powerpc/kernel/traps.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 2105767fcc57..e4d1713e8aea 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 | ||
59 | cpumask_t cpus_in_sr = CPU_MASK_NONE; | ||
60 | #endif | ||
61 | #endif | 58 | #endif |
62 | 59 | ||
63 | #ifdef CONFIG_DEBUGGER | 60 | #ifdef CONFIG_DEBUGGER |
@@ -151,7 +148,7 @@ int die(const char *str, struct pt_regs *regs, long err) | |||
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 | panic("Fatal exception: panic_on_oops"); | 151 | panic("Fatal exception"); |
155 | 152 | ||
156 | do_exit(err); | 153 | do_exit(err); |
157 | 154 | ||
@@ -211,6 +208,19 @@ void system_reset_exception(struct pt_regs *regs) | |||
211 | 208 | ||
212 | die("System Reset", regs, SIGABRT); | 209 | die("System Reset", regs, SIGABRT); |
213 | 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 | |||
214 | /* Must die if the interrupt is not recoverable */ | 224 | /* Must die if the interrupt is not recoverable */ |
215 | if (!(regs->msr & MSR_RI)) | 225 | if (!(regs->msr & MSR_RI)) |
216 | panic("Unrecoverable System Reset"); | 226 | panic("Unrecoverable System Reset"); |