diff options
Diffstat (limited to 'kernel/cpu.c')
| -rw-r--r-- | kernel/cpu.c | 24 | 
1 files changed, 3 insertions, 21 deletions
| diff --git a/kernel/cpu.c b/kernel/cpu.c index 291ac586f37f..1c8ddd6ee940 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -209,6 +209,7 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)  		return -ENOMEM;  	cpu_hotplug_begin(); +	set_cpu_active(cpu, false);  	err = __raw_notifier_call_chain(&cpu_chain, CPU_DOWN_PREPARE | mod,  					hcpu, -1, &nr_calls);  	if (err == NOTIFY_BAD) { @@ -280,18 +281,6 @@ int __ref cpu_down(unsigned int cpu)  		goto out;  	} -	set_cpu_active(cpu, false); - -	/* -	 * Make sure the all cpus did the reschedule and are not -	 * using stale version of the cpu_active_mask. -	 * This is not strictly necessary becuase stop_machine() -	 * that we run down the line already provides the required -	 * synchronization. But it's really a side effect and we do not -	 * want to depend on the innards of the stop_machine here. -	 */ -	synchronize_sched(); -  	err = _cpu_down(cpu, 0);  out: @@ -382,19 +371,12 @@ int disable_nonboot_cpus(void)  		return error;  	cpu_maps_update_begin();  	first_cpu = cpumask_first(cpu_online_mask); -	/* We take down all of the non-boot CPUs in one shot to avoid races +	/* +	 * We take down all of the non-boot CPUs in one shot to avoid races  	 * with the userspace trying to use the CPU hotplug at the same time  	 */  	cpumask_clear(frozen_cpus); -	for_each_online_cpu(cpu) { -		if (cpu == first_cpu) -			continue; -		set_cpu_active(cpu, false); -	} - -	synchronize_sched(); -  	printk("Disabling non-boot CPUs ...\n");  	for_each_online_cpu(cpu) {  		if (cpu == first_cpu) | 
