cgroup/cpuset: Streamline rm_siblings_excl_cpus()

If exclusive_cpus is set, effective_xcpus must be a subset of
exclusive_cpus. Currently, rm_siblings_excl_cpus() checks both
exclusive_cpus and effective_xcpus consecutively. It is simpler
to check only exclusive_cpus if non-empty or just effective_xcpus
otherwise.

No functional change is expected.

Signed-off-by: Waiman Long <longman@redhat.com>
Reviewed-by: Chen Ridong <chenridong@huawei.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
Waiman Long
2026-01-12 11:00:17 -05:00
committed by Tejun Heo
parent 269679bdd1
commit 18bc2425a8

View File

@@ -1355,23 +1355,29 @@ static int rm_siblings_excl_cpus(struct cpuset *parent, struct cpuset *cs,
int retval = 0;
if (cpumask_empty(excpus))
return retval;
return 0;
/*
* Exclude exclusive CPUs from siblings
* Remove exclusive CPUs from siblings
*/
rcu_read_lock();
cpuset_for_each_child(sibling, css, parent) {
struct cpumask *sibling_xcpus;
if (sibling == cs)
continue;
if (cpumask_intersects(excpus, sibling->exclusive_cpus)) {
cpumask_andnot(excpus, excpus, sibling->exclusive_cpus);
retval++;
continue;
}
if (cpumask_intersects(excpus, sibling->effective_xcpus)) {
cpumask_andnot(excpus, excpus, sibling->effective_xcpus);
/*
* If exclusive_cpus is defined, effective_xcpus will always
* be a subset. Otherwise, effective_xcpus will only be set
* in a valid partition root.
*/
sibling_xcpus = cpumask_empty(sibling->exclusive_cpus)
? sibling->effective_xcpus
: sibling->exclusive_cpus;
if (cpumask_intersects(excpus, sibling_xcpus)) {
cpumask_andnot(excpus, excpus, sibling_xcpus);
retval++;
}
}