On Wed, Oct 23, 2019 at 04:37:44PM +0100, Valentin Schneider wrote: > Prevent generate_sched_domains() from returning empty cpumasks, and add > some assertion in build_sched_domains() to scream bloody murder if it > happens again. Good catch. It makes sense to prune the empty domains in generate_sched_domains already. > diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c > index c52bc91f882b..c87ee6412b36 100644 > --- a/kernel/cgroup/cpuset.c > +++ b/kernel/cgroup/cpuset.c > @@ -798,7 +798,8 @@ static int generate_sched_domains(cpumask_var_t **domains, > cpumask_subset(cp->cpus_allowed, top_cpuset.effective_cpus)) > continue; > > - if (is_sched_load_balance(cp)) > + if (is_sched_load_balance(cp) && > + !cpumask_empty(cp->effective_cpus)) > csa[csn++] = cp; If I didn't overlook anything, cp->effective_cpus can contain CPUs exluded by housekeeping_cpumask(HK_FLAG_DOMAIN) later, i.e. possibly still returning domains with empty cpusets. I'd suggest moving the emptiness check down into the loop where domain cpumasks are ultimately constructed. Michal