Loading kernel/cpu.c +15 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <linux/percpu-rwsem.h> #include <uapi/linux/sched/types.h> #include <linux/highmem.h> #include <linux/cpuset.h> #include <trace/events/power.h> #define CREATE_TRACE_POINTS Loading Loading @@ -1024,6 +1025,18 @@ static int do_cpu_down(unsigned int cpu, enum cpuhp_state target) { int err; /* * When cpusets are enabled, the rebuilding of the scheduling * domains is deferred to a workqueue context. Make sure * that the work is completed before proceeding to the next * hotplug. Otherwise scheduler observes an inconsistent * view of online and offline CPUs in the root domain. If * the online CPUs are still stuck in the offline (default) * domain, those CPUs would not be visible when scheduling * happens on from other CPUs in the root domain. */ cpuset_wait_for_hotplug(); cpu_maps_update_begin(); err = cpu_down_maps_locked(cpu, target); cpu_maps_update_done(); Loading Loading @@ -1186,6 +1199,8 @@ static int do_cpu_up(unsigned int cpu, enum cpuhp_state target) return -EINVAL; } cpuset_wait_for_hotplug(); switch_err = switch_to_rt_policy(); if (switch_err < 0) return switch_err; Loading Loading
kernel/cpu.c +15 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ #include <linux/percpu-rwsem.h> #include <uapi/linux/sched/types.h> #include <linux/highmem.h> #include <linux/cpuset.h> #include <trace/events/power.h> #define CREATE_TRACE_POINTS Loading Loading @@ -1024,6 +1025,18 @@ static int do_cpu_down(unsigned int cpu, enum cpuhp_state target) { int err; /* * When cpusets are enabled, the rebuilding of the scheduling * domains is deferred to a workqueue context. Make sure * that the work is completed before proceeding to the next * hotplug. Otherwise scheduler observes an inconsistent * view of online and offline CPUs in the root domain. If * the online CPUs are still stuck in the offline (default) * domain, those CPUs would not be visible when scheduling * happens on from other CPUs in the root domain. */ cpuset_wait_for_hotplug(); cpu_maps_update_begin(); err = cpu_down_maps_locked(cpu, target); cpu_maps_update_done(); Loading Loading @@ -1186,6 +1199,8 @@ static int do_cpu_up(unsigned int cpu, enum cpuhp_state target) return -EINVAL; } cpuset_wait_for_hotplug(); switch_err = switch_to_rt_policy(); if (switch_err < 0) return switch_err; Loading