All of lore.kernel.org
 help / color / mirror / Atom feed
From: Waiman Long <longman@redhat.com>
To: Chen Ridong <chenridong@huawei.com>,
	tj@kernel.org, lizefan.x@bytedance.com, hannes@cmpxchg.org,
	adityakali@google.com, sergeh@kernel.org, mkoutny@suse.com
Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH -next 1/3] cgroup/cpuset: Correct invalid remote parition prs
Date: Sun, 18 Aug 2024 22:18:08 -0400	[thread overview]
Message-ID: <ff059171-d38e-41a3-86e0-e092a34ba970@redhat.com> (raw)
In-Reply-To: <dc4672a0-bff4-493f-81da-9dfdda9018f2@redhat.com>

On 8/18/24 22:14, Waiman Long wrote:
>
> On 8/16/24 04:27, Chen Ridong wrote:
>> When enable a remote partition, I found that:
>>
>> cd /sys/fs/cgroup/
>> mkdir test
>> mkdir test/test1
>> echo +cpuset > cgroup.subtree_control
>> echo +cpuset >  test/cgroup.subtree_control
>> echo 3 > test/test1/cpuset.cpus
>> echo root > test/test1/cpuset.cpus.partition
>> cat test/test1/cpuset.cpus.partition
>> root invalid (Parent is not a partition root)
>>
>> The parent of a remote partition could not be a root. This is due to the
>> emtpy effective_xcpus. It would be better to prompt the message "invalid
>> cpu list in cpuset.cpus.exclusive".
>>
>> Signed-off-by: Chen Ridong <chenridong@huawei.com>
>> ---
>>   kernel/cgroup/cpuset.c | 42 +++++++++++++++++++++++-------------------
>>   1 file changed, 23 insertions(+), 19 deletions(-)
>>
>> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
>> index e34fd6108b06..fdd5346616d3 100644
>> --- a/kernel/cgroup/cpuset.c
>> +++ b/kernel/cgroup/cpuset.c
>> @@ -80,6 +80,7 @@ enum prs_errcode {
>>       PERR_HOTPLUG,
>>       PERR_CPUSEMPTY,
>>       PERR_HKEEPING,
>> +    PERR_PMT,

One more thing, the "PMT" acronym for the error code is hard to decode. 
I will suggest you either use the "PERMISSION" or "ACCESS" like the 
EACCESS errno.

Cheers,
Longman

>>   };
>>     static const char * const perr_strings[] = {
>> @@ -91,6 +92,7 @@ static const char * const perr_strings[] = {
>>       [PERR_HOTPLUG]   = "No cpu available due to hotplug",
>>       [PERR_CPUSEMPTY] = "cpuset.cpus and cpuset.cpus.exclusive are 
>> empty",
>>       [PERR_HKEEPING]  = "partition config conflicts with 
>> housekeeping setup",
>> +    [PERR_PMT]       = "Enable partition not permitted",
>>   };
>>     struct cpuset {
>> @@ -1669,7 +1671,7 @@ static int remote_partition_enable(struct 
>> cpuset *cs, int new_prs,
>>        * The user must have sysadmin privilege.
>>        */
>>       if (!capable(CAP_SYS_ADMIN))
>> -        return 0;
>> +        return PERR_PMT;
>>         /*
>>        * The requested exclusive_cpus must not be allocated to other
>> @@ -1683,7 +1685,7 @@ static int remote_partition_enable(struct 
>> cpuset *cs, int new_prs,
>>       if (cpumask_empty(tmp->new_cpus) ||
>>           cpumask_intersects(tmp->new_cpus, subpartitions_cpus) ||
>>           cpumask_subset(top_cpuset.effective_cpus, tmp->new_cpus))
>> -        return 0;
>> +        return PERR_INVCPUS;
>>         spin_lock_irq(&callback_lock);
>>       isolcpus_updated = partition_xcpus_add(new_prs, NULL, 
>> tmp->new_cpus);
>> @@ -1698,7 +1700,7 @@ static int remote_partition_enable(struct 
>> cpuset *cs, int new_prs,
>>        */
>>       update_tasks_cpumask(&top_cpuset, tmp->new_cpus);
>>       update_sibling_cpumasks(&top_cpuset, NULL, tmp);
>> -    return 1;
>> +    return 0;
>>   }
>
> Since you are changing the meaning of the function returned value, you 
> should also update the return value comment as well.
>
>>     /*
>> @@ -3151,24 +3153,26 @@ static int update_prstate(struct cpuset *cs, 
>> int new_prs)
>>           goto out;
>>         if (!old_prs) {
>> -        enum partition_cmd cmd = (new_prs == PRS_ROOT)
>> -                       ? partcmd_enable : partcmd_enablei;
>> -
>>           /*
>> -         * cpus_allowed and exclusive_cpus cannot be both empty.
>> -         */
>> -        if (xcpus_empty(cs)) {
>> -            err = PERR_CPUSEMPTY;
>> -            goto out;
>> -        }
>> +        * If parent is valid partition, enable local partiion.
>> +        * Otherwise, enable a remote partition.
>> +        */
>> +        if (is_partition_valid(parent)) {
>> +            enum partition_cmd cmd = (new_prs == PRS_ROOT)
>> +                           ? partcmd_enable : partcmd_enablei;
>>   -        err = update_parent_effective_cpumask(cs, cmd, NULL, 
>> &tmpmask);
>> -        /*
>> -         * If an attempt to become local partition root fails,
>> -         * try to become a remote partition root instead.
>> -         */
>> -        if (err && remote_partition_enable(cs, new_prs, &tmpmask))
>> -            err = 0;
>> +            /*
>> +             * cpus_allowed and exclusive_cpus cannot be both empty.
>> +             */
>> +            if (xcpus_empty(cs)) {
>> +                err = PERR_CPUSEMPTY;
>> +                goto out;
>> +            }
>
> The xcpus_empty() check should be done for both local and remote 
> partition.
>
> Cheers,
> Longman
>
>> +
>> +            err = update_parent_effective_cpumask(cs, cmd, NULL, 
>> &tmpmask);
>> +        } else {
>> +            err = remote_partition_enable(cs, new_prs, &tmpmask);
>> +        }
>>       } else if (old_prs && new_prs) {
>>           /*
>>            * A change in load balance state only, no change in cpumasks.


  reply	other threads:[~2024-08-19  2:18 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-16  8:27 [PATCH -next 0/3] Some optimizations about cpuset Chen Ridong
2024-08-16  8:27 ` [PATCH -next 1/3] cgroup/cpuset: Correct invalid remote parition prs Chen Ridong
2024-08-19  2:14   ` Waiman Long
2024-08-19  2:18     ` Waiman Long [this message]
2024-08-19  6:25       ` chenridong
2024-08-16  8:27 ` [PATCH -next 2/3] cgroup/cpuset: remove fetch_xcpus Chen Ridong
2024-08-19 17:24   ` Saket Kumar Bhaskar
2024-08-19 18:28   ` Waiman Long
2024-08-16  8:27 ` [PATCH -next 3/3] cgroup/cpuset: remove use_parent_ecpus of cpuset Chen Ridong
2024-08-19 18:43   ` Waiman Long
2024-08-19 22:01 ` [PATCH -next 0/3] Some optimizations about cpuset Tejun Heo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ff059171-d38e-41a3-86e0-e092a34ba970@redhat.com \
    --to=longman@redhat.com \
    --cc=adityakali@google.com \
    --cc=cgroups@vger.kernel.org \
    --cc=chenridong@huawei.com \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizefan.x@bytedance.com \
    --cc=mkoutny@suse.com \
    --cc=sergeh@kernel.org \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.