aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/kernel/traps.c13
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");