diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index ae2b1ad2360742aeec842e8f041d0d75cc3327ea..4869922f8f0281bbbba640a88204994fd7c0ee15 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -916,6 +916,7 @@ static void rebuild_sched_domains_locked(void) struct sched_domain_attr *attr; cpumask_var_t *doms; int ndoms; + int i; lockdep_assert_cpus_held(); lockdep_assert_held(&cpuset_mutex); @@ -931,6 +932,12 @@ static void rebuild_sched_domains_locked(void) /* Generate domain masks and attrs */ ndoms = generate_sched_domains(&doms, &attr); + /* guarantee no CPU offlining in doms */ + for (i = 0; i < ndoms; ++i) { + if (doms && !cpumask_subset(doms[i], cpu_active_mask)) + return; + } + /* Have scheduler rebuild the domains */ partition_sched_domains(ndoms, doms, attr); }