diff options
Diffstat (limited to 'arch/powerpc/kernel/crash.c')
| -rw-r--r-- | arch/powerpc/kernel/crash.c | 24 | 
1 files changed, 13 insertions, 11 deletions
| diff --git a/arch/powerpc/kernel/crash.c b/arch/powerpc/kernel/crash.c index 417f7b05a9c..4457382f866 100644 --- a/arch/powerpc/kernel/crash.c +++ b/arch/powerpc/kernel/crash.c @@ -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);  } | 
