diff options
Diffstat (limited to 'arch/powerpc/platforms/pseries/hotplug-cpu.c')
| -rw-r--r-- | arch/powerpc/platforms/pseries/hotplug-cpu.c | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index a38956269fb..217ca5c75b2 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c @@ -127,9 +127,16 @@ static void pseries_mach_cpu_die(void)  			get_lppaca()->donate_dedicated_cpu = 1;  		while (get_preferred_offline_state(cpu) == CPU_STATE_INACTIVE) { +			while (!prep_irq_for_idle()) { +				local_irq_enable(); +				local_irq_disable(); +			} +  			extended_cede_processor(cede_latency_hint);  		} +		local_irq_disable(); +  		if (!get_lppaca()->shared_proc)  			get_lppaca()->donate_dedicated_cpu = 0;  		get_lppaca()->idle = 0; @@ -137,6 +144,7 @@ static void pseries_mach_cpu_die(void)  		if (get_preferred_offline_state(cpu) == CPU_STATE_ONLINE) {  			unregister_slb_shadow(hwcpu); +			hard_irq_disable();  			/*  			 * Call to start_secondary_resume() will not return.  			 * Kernel stack will be reset and start_secondary()  |