|
@@ -1882,7 +1882,7 @@ static void scan_for_empty_cpusets(const struct cpuset *root)
|
|
|
* in order to minimize text size.
|
|
|
*/
|
|
|
|
|
|
-static void common_cpu_mem_hotplug_unplug(void)
|
|
|
+static void common_cpu_mem_hotplug_unplug(int rebuild_sd)
|
|
|
{
|
|
|
cgroup_lock();
|
|
|
|
|
@@ -1894,7 +1894,8 @@ static void common_cpu_mem_hotplug_unplug(void)
|
|
|
* Scheduler destroys domains on hotplug events.
|
|
|
* Rebuild them based on the current settings.
|
|
|
*/
|
|
|
- rebuild_sched_domains();
|
|
|
+ if (rebuild_sd)
|
|
|
+ rebuild_sched_domains();
|
|
|
|
|
|
cgroup_unlock();
|
|
|
}
|
|
@@ -1912,11 +1913,22 @@ static void common_cpu_mem_hotplug_unplug(void)
|
|
|
static int cpuset_handle_cpuhp(struct notifier_block *unused_nb,
|
|
|
unsigned long phase, void *unused_cpu)
|
|
|
{
|
|
|
- if (phase == CPU_DYING || phase == CPU_DYING_FROZEN)
|
|
|
+ switch (phase) {
|
|
|
+ case CPU_UP_CANCELED:
|
|
|
+ case CPU_UP_CANCELED_FROZEN:
|
|
|
+ case CPU_DOWN_FAILED:
|
|
|
+ case CPU_DOWN_FAILED_FROZEN:
|
|
|
+ case CPU_ONLINE:
|
|
|
+ case CPU_ONLINE_FROZEN:
|
|
|
+ case CPU_DEAD:
|
|
|
+ case CPU_DEAD_FROZEN:
|
|
|
+ common_cpu_mem_hotplug_unplug(1);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
return NOTIFY_DONE;
|
|
|
+ }
|
|
|
|
|
|
- common_cpu_mem_hotplug_unplug();
|
|
|
- return 0;
|
|
|
+ return NOTIFY_OK;
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
|
@@ -1929,7 +1941,7 @@ static int cpuset_handle_cpuhp(struct notifier_block *unused_nb,
|
|
|
|
|
|
void cpuset_track_online_nodes(void)
|
|
|
{
|
|
|
- common_cpu_mem_hotplug_unplug();
|
|
|
+ common_cpu_mem_hotplug_unplug(0);
|
|
|
}
|
|
|
#endif
|
|
|
|