|
@@ -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)
|