diff options
Diffstat (limited to 'arch/powerpc/kernel/machine_kexec_64.c')
| -rw-r--r-- | arch/powerpc/kernel/machine_kexec_64.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/machine_kexec_64.c b/arch/powerpc/kernel/machine_kexec_64.c index 7206701b1ff..466a2908bb6 100644 --- a/arch/powerpc/kernel/machine_kexec_64.c +++ b/arch/powerpc/kernel/machine_kexec_64.c @@ -162,6 +162,8 @@ static int kexec_all_irq_disabled = 0;  static void kexec_smp_down(void *arg)  {  	local_irq_disable(); +	hard_irq_disable(); +  	mb(); /* make sure our irqs are disabled before we say they are */  	get_paca()->kexec_state = KEXEC_STATE_IRQS_OFF;  	while(kexec_all_irq_disabled == 0) @@ -244,6 +246,8 @@ static void kexec_prepare_cpus(void)  	wake_offline_cpus();  	smp_call_function(kexec_smp_down, NULL, /* wait */0);  	local_irq_disable(); +	hard_irq_disable(); +  	mb(); /* make sure IRQs are disabled before we say they are */  	get_paca()->kexec_state = KEXEC_STATE_IRQS_OFF; @@ -281,6 +285,7 @@ static void kexec_prepare_cpus(void)  	if (ppc_md.kexec_cpu_down)  		ppc_md.kexec_cpu_down(0, 0);  	local_irq_disable(); +	hard_irq_disable();  }  #endif /* SMP */  |