|
@@ -402,6 +402,18 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
|
|
|
*/
|
|
|
hard_irq_disable();
|
|
|
|
|
|
+ /*
|
|
|
+ * Make a note of crashing cpu. Will be used in machine_kexec
|
|
|
+ * such that another IPI will not be sent.
|
|
|
+ */
|
|
|
+ crashing_cpu = smp_processor_id();
|
|
|
+ crash_save_cpu(regs, crashing_cpu);
|
|
|
+ crash_kexec_prepare_cpus(crashing_cpu);
|
|
|
+ cpu_set(crashing_cpu, cpus_in_crash);
|
|
|
+#if defined(CONFIG_PPC_STD_MMU_64) && defined(CONFIG_SMP)
|
|
|
+ crash_kexec_wait_realmode(crashing_cpu);
|
|
|
+#endif
|
|
|
+
|
|
|
for_each_irq(i) {
|
|
|
struct irq_desc *desc = irq_to_desc(i);
|
|
|
|
|
@@ -438,18 +450,8 @@ void default_machine_crash_shutdown(struct pt_regs *regs)
|
|
|
crash_shutdown_cpu = -1;
|
|
|
__debugger_fault_handler = old_handler;
|
|
|
|
|
|
- /*
|
|
|
- * Make a note of crashing cpu. Will be used in machine_kexec
|
|
|
- * such that another IPI will not be sent.
|
|
|
- */
|
|
|
- crashing_cpu = smp_processor_id();
|
|
|
- crash_save_cpu(regs, crashing_cpu);
|
|
|
- crash_kexec_prepare_cpus(crashing_cpu);
|
|
|
- cpu_set(crashing_cpu, cpus_in_crash);
|
|
|
crash_kexec_stop_spus();
|
|
|
-#if defined(CONFIG_PPC_STD_MMU_64) && defined(CONFIG_SMP)
|
|
|
- crash_kexec_wait_realmode(crashing_cpu);
|
|
|
-#endif
|
|
|
+
|
|
|
if (ppc_md.kexec_cpu_down)
|
|
|
ppc_md.kexec_cpu_down(1, 0);
|
|
|
}
|