All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ridong Chen <ridong.chen@linux.dev>
To: "Waiman Long" <longman@redhat.com>, "Tejun Heo" <tj@kernel.org>,
	"Johannes Weiner" <hannes@cmpxchg.org>,
	"Michal Koutný" <mkoutny@suse.com>,
	"Shuah Khan" <shuah@kernel.org>
Cc: Chen Ridong <chenridong@huawei.com>,
	cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-kselftest@vger.kernel.org, Sashiko <sashiko-bot@kernel.org>,
	Guopeng Zhang <zhangguopeng@kylinos.cn>,
	Ridong Chen <chenridong@xiaomi.com>
Subject: Re: [PATCH v2 4/4] cpuset: generalize the validate_partition() interface
Date: Sat, 7 Nov 2026 19:01:22 +0800	[thread overview]
Message-ID: <a9b6c97d-a0c0-4855-ae51-d938b4b9f82d@linux.dev> (raw)
In-Reply-To: <04c50e9b-954f-4869-a9bd-41b9341bdef8@redhat.com>



On 11/7/2026 11:59 AM, Waiman Long wrote:
> On 11/6/26 5:55 AM, Ridong Chen wrote:
>> From: Chen Ridong <chenridong@huawei.com>
>>
>> Refactor validate_partition() to take the parent partition, the new
>> partition root state, the new effective exclusive CPUs and the CPUs to
>> be deleted, instead of a trial cpuset. A NULL parent stands for a
>> remote partition, whose CPUs come from top_cpuset. This makes the
>> interface flexible enough to handle both local and remote partition
>> validation.
>>
>> The housekeeping conflict check is folded into validate_partition(). It
>> is skipped when the parent is not a valid partition root, as @cs can't
>> be a valid local partition in that case.
>>
>> Use the new interface for local partition enablement in
>> update_parent_effective_cpumask() and in partition_cpus_change(),
>> replacing the open-coded checks there. The order of the checks is now
>> the same for both paths: empty CPUs, housekeeping conflict, then no CPU
>> left for tasks.
>>
>> Signed-off-by: Chen Ridong <chenridong@huawei.com>
>> Signed-off-by: Ridong Chen <chenridong@xiaomi.com>
>> ---
>>   kernel/cgroup/cpuset.c | 112 +++++++++++++++++++----------------------
>>   1 file changed, 52 insertions(+), 60 deletions(-)
>>
>> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
>> index a5ab9396eb61..1b0ac4e76ec7 100644
>> --- a/kernel/cgroup/cpuset.c
>> +++ b/kernel/cgroup/cpuset.c
>> @@ -1434,6 +1434,41 @@ static bool prstate_housekeeping_conflict(int new_prs, 
>> int parent_prs,
>>       return res;
>>   }
>> +/**
>> + * validate_partition - Validate a cpuset partition configuration
>> + * @cs: The cpuset to validate
>> + * @parent: Parent partition of @cs, NULL for remote partition
>> + * @new_prs: The proposed new partition root state
>> + * @new_excpus: The new effective exclusive CPUs mask to validate
>> + * @del: exclusive CPUs to be deleted from @cs, can be NULL
>> + *
>> + * The housekeeping check is skipped if @parent is not a valid partition
>> + * root as @cs can't be a valid local partition in that case.
>> + *
>> + * Return: PRS error code (0 if valid, non-zero error code if invalid)
>> + */
>> +static enum prs_errcode validate_partition(struct cpuset *cs,
>> +        struct cpuset *parent, int new_prs,
>> +        struct cpumask *new_excpus, struct cpumask *del)
>> +{
>> +    int parent_prs = parent ? parent->partition_root_state : PRS_ROOT;
>> +
>> +    if (new_prs == PRS_MEMBER)
>> +        return PERR_NONE;
>> +
>> +    if (cpumask_empty(new_excpus))
>> +        return PERR_INVCPUS;
>> +
>> +    if ((parent_prs > 0) &&
>> +        prstate_housekeeping_conflict(new_prs, parent_prs, new_excpus, del))
>> +        return PERR_HKEEPING;
>> +
>> +    if (tasks_nocpu_error(parent_cs(cs), cs, new_excpus))
>> +        return PERR_NOCPUS;
> 
> For remote partition, the parent should be top_cpuset. I think we should set 
> parent to top_cpuset if NULL and pass it directly to tasks_nocpu_error().
> 

Good catch, thanks. parent_cs(cs) is wrong for a remote partition, since
its CPUs come from top_cpuset rather than its cgroup parent. I'll set
parent to &top_cpuset when it's NULL and pass it to tasks_nocpu_error():
	
	  if (!parent)
			  parent = &top_cpuset;
	  parent_prs = parent->partition_root_state;
	  if (parent_prs > 0 &&
		  prstate_housekeeping_conflict(new_prs, parent_prs, new_excpus, del))
			  return PERR_HKEEPING;
	
	  if (tasks_nocpu_error(parent, cs, new_excpus))
			  return PERR_NOCPUS;

> Other than that, the rests look good to me.
> 

Thanks for the review. Will fix it in v3.

-- 
Best regards
Ridong


      reply	other threads:[~2026-11-07 11:01 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-06 10:55 [PATCH v2 0/4] cpuset: preparatory fixes and cleanups for partition rework Ridong Chen
2026-11-06 10:55 ` [PATCH v2 1/4] cgroup/cpuset: Reset partition data when an invalid partition stays invalid Ridong Chen
2026-11-06 19:10   ` Waiman Long
2026-11-06 10:55 ` [PATCH v2 2/4] cpuset: add early empty cpumask check in partition_xcpus_add/del Ridong Chen
2026-11-07  2:21   ` Waiman Long
2026-11-06 10:55 ` [PATCH v2 3/4] cpuset: settle isolation state when CPUs are given back to parent Ridong Chen
2026-11-07  2:28   ` Waiman Long
2026-11-07 10:53     ` Ridong Chen
2026-11-06 10:55 ` [PATCH v2 4/4] cpuset: generalize the validate_partition() interface Ridong Chen
2026-11-07  3:59   ` Waiman Long
2026-11-07 11:01     ` Ridong Chen [this message]

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=a9b6c97d-a0c0-4855-ae51-d938b4b9f82d@linux.dev \
    --to=ridong.chen@linux.dev \
    --cc=cgroups@vger.kernel.org \
    --cc=chenridong@huawei.com \
    --cc=chenridong@xiaomi.com \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=mkoutny@suse.com \
    --cc=sashiko-bot@kernel.org \
    --cc=shuah@kernel.org \
    --cc=tj@kernel.org \
    --cc=zhangguopeng@kylinos.cn \
    /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.