[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <2988a9d5-fe25-4668-93e3-8335360fcbec@redhat.com>
Date: Sat, 27 Dec 2025 02:40:53 -0500
From: Waiman Long <llong@...hat.com>
To: Chen Ridong <chenridong@...weicloud.com>, Tejun Heo <tj@...nel.org>,
Johannes Weiner <hannes@...xchg.org>, Michal Koutný
<mkoutny@...e.com>, Shuah Khan <shuah@...nel.org>
Cc: linux-kernel@...r.kernel.org, cgroups@...r.kernel.org,
linux-kselftest@...r.kernel.org, Sun Shaojie <sunshaojie@...inos.cn>
Subject: Re: [cgroup/for-6.20 PATCH 1/4] cgroup/cpuset: Streamline
rm_siblings_excl_cpus()
On 12/25/25 4:27 AM, Chen Ridong wrote:
>
> On 2025/12/25 15:30, Waiman Long wrote:
>> 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 connectively. 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@...hat.com>
>> ---
>> kernel/cgroup/cpuset.c | 17 +++++++++--------
>> 1 file changed, 9 insertions(+), 8 deletions(-)
>>
>> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
>> index 221da921b4f9..3d2d28f0fd03 100644
>> --- a/kernel/cgroup/cpuset.c
>> +++ b/kernel/cgroup/cpuset.c
>> @@ -1355,23 +1355,24 @@ 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
>> */
>> 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);
>> + sibling_xcpus = cpumask_empty(sibling->exclusive_cpus)
>> + ? sibling->effective_xcpus
>> + : sibling->exclusive_cpus;
>> +
> I'm wondering if this is sufficient?
>
> sibling_xcpus = sibling->effective_xcpus
>
> p(exclusive_cpus = 1)
> / \
> a b(root, exclusive_cpus=1-7, effective_xcpus=1)
>
> What the sibling's effective exclusive CPUs actually should be is not CPUs 1-7 but CPU 1. So, do we
> need to remove CPUs 2-7?
By definition, exclusive_cpus have to be exclusive within the same child
cpuset level even if some of the CPUs cannot be granted from the parent.
So other siblings cannot use any of the CPUs 1-7 in its exclusive_cpus
list or the writing will fail. In the case of cpuset.cpus defined
partitions, those CPUs will be removed from its effective_xcpus list.
Cheers,
Longman
Powered by blists - more mailing lists