diff options
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r-- | arch/powerpc/kernel/traps.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 2105767fcc57..5147175f921c 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -211,6 +211,19 @@ void system_reset_exception(struct pt_regs *regs) | |||
211 | 211 | ||
212 | die("System Reset", regs, SIGABRT); | 212 | die("System Reset", regs, SIGABRT); |
213 | 213 | ||
214 | /* | ||
215 | * Some CPUs when released from the debugger will execute this path. | ||
216 | * These CPUs entered the debugger via a soft-reset. If the CPU was | ||
217 | * hung before entering the debugger it will return to the hung | ||
218 | * state when exiting this function. This causes a problem in | ||
219 | * kdump since the hung CPU(s) will not respond to the IPI sent | ||
220 | * from kdump. To prevent the problem we call crash_kexec_secondary() | ||
221 | * here. If a kdump had not been initiated or we exit the debugger | ||
222 | * with the "exit and recover" command (x) crash_kexec_secondary() | ||
223 | * will return after 5ms and the CPU returns to its previous state. | ||
224 | */ | ||
225 | crash_kexec_secondary(regs); | ||
226 | |||
214 | /* Must die if the interrupt is not recoverable */ | 227 | /* Must die if the interrupt is not recoverable */ |
215 | if (!(regs->msr & MSR_RI)) | 228 | if (!(regs->msr & MSR_RI)) |
216 | panic("Unrecoverable System Reset"); | 229 | panic("Unrecoverable System Reset"); |