On Wed, Oct 23, 2019 at 04:37:44PM +0100, Valentin Schneider valentin.schneider@arm.com 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