Commit 18bc2425 authored by Waiman Long's avatar Waiman Long Committed by Tejun Heo
Browse files

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: default avatarWaiman Long <longman@redhat.com>
Reviewed-by: default avatarChen Ridong <chenridong@huawei.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 269679bd
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -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++;
		}
	}