cgroups.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chen Ridong <chenridong@huaweicloud.com>
To: longman@redhat.com, tj@kernel.org, hannes@cmpxchg.org, mkoutny@suse.com
Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
	lujialin4@huawei.com, chenridong@huawei.com
Subject: Re: [PATCH -next] cpuset: fix warning when disabling remote partition
Date: Tue, 9 Dec 2025 10:56:20 +0800	[thread overview]
Message-ID: <d43bc75d-0a5f-41e7-b127-df6c3d26f44b@huaweicloud.com> (raw)
In-Reply-To: <20251127030450.1611804-1-chenridong@huaweicloud.com>



On 2025/11/27 11:04, Chen Ridong wrote:
> From: Chen Ridong <chenridong@huawei.com>
> 
> A warning was triggered as follows:
> 
> WARNING: kernel/cgroup/cpuset.c:1651 at remote_partition_disable+0xf7/0x110
> RIP: 0010:remote_partition_disable+0xf7/0x110
> RSP: 0018:ffffc90001947d88 EFLAGS: 00000206
> RAX: 0000000000007fff RBX: ffff888103b6e000 RCX: 0000000000006f40
> RDX: 0000000000006f00 RSI: ffffc90001947da8 RDI: ffff888103b6e000
> RBP: ffff888103b6e000 R08: 0000000000000000 R09: 0000000000000000
> R10: 0000000000000001 R11: ffff88810b2e2728 R12: ffffc90001947da8
> R13: 0000000000000000 R14: ffffc90001947da8 R15: ffff8881081f1c00
> CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 00007f55c8bbe0b2 CR3: 000000010b14c000 CR4: 00000000000006f0
> Call Trace:
>  <TASK>
>  update_prstate+0x2d3/0x580
>  cpuset_partition_write+0x94/0xf0
>  kernfs_fop_write_iter+0x147/0x200
>  vfs_write+0x35d/0x500
>  ksys_write+0x66/0xe0
>  do_syscall_64+0x6b/0x390
>  entry_SYSCALL_64_after_hwframe+0x4b/0x53
> RIP: 0033:0x7f55c8cd4887
> 
> Reproduction steps (on a 16-CPU machine):
> 
>         # cd /sys/fs/cgroup/
>         # mkdir A1
>         # echo +cpuset > A1/cgroup.subtree_control
>         # echo "0-14" > A1/cpuset.cpus.exclusive
>         # mkdir A1/A2
>         # echo "0-14" > A1/A2/cpuset.cpus.exclusive
>         # echo "root" > A1/A2/cpuset.cpus.partition
>         # echo 0 > /sys/devices/system/cpu/cpu15/online
>         # echo member > A1/A2/cpuset.cpus.partition
> 
> When CPU 15 is offlined, subpartitions_cpus gets cleared because no CPUs
> remain available for the top_cpuset, forcing partitions to share CPUs with
> the top_cpuset. In this scenario, disabling the remote partition triggers
> a warning stating that effective_xcpus is not a subset of
> subpartitions_cpus. Partitions should be invalidated in this case to
> inform users that the partition is now invalid(cpus are shared with
> top_cpuset).
> 
> To fix this issue:
> 1. Only emit the warning only if subpartitions_cpus is not empty and the
>    effective_xcpus is not a subset of subpartitions_cpus.
> 2. During the CPU hotplug process, invalidate partitions if
>    subpartitions_cpus is empty.
> 
> Fixes: 4449b1ce46bf ("cgroup/cpuset: Remove remote_partition_check() & make update_cpumasks_hier() handle remote partition")
> Signed-off-by: Chen Ridong <chenridong@huawei.com>
> ---
>  kernel/cgroup/cpuset.c | 21 ++++++++++++++++-----
>  1 file changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
> index fea577b4016a..fbe539d66d9b 100644
> --- a/kernel/cgroup/cpuset.c
> +++ b/kernel/cgroup/cpuset.c
> @@ -1648,7 +1648,14 @@ static int remote_partition_enable(struct cpuset *cs, int new_prs,
>  static void remote_partition_disable(struct cpuset *cs, struct tmpmasks *tmp)
>  {
>  	WARN_ON_ONCE(!is_remote_partition(cs));
> -	WARN_ON_ONCE(!cpumask_subset(cs->effective_xcpus, subpartitions_cpus));
> +	/*
> +	 * When a CPU is offlined, top_cpuset may end up with no available CPUs,
> +	 * which should clear subpartitions_cpus. We should not emit a warning for this
> +	 * scenario: the hierarchy is updated from top to bottom, so subpartitions_cpus
> +	 * may already be cleared when disabling the partition.
> +	 */
> +	WARN_ON_ONCE(!cpumask_subset(cs->effective_xcpus, subpartitions_cpus) &&
> +		     !cpumask_empty(subpartitions_cpus));
>  
>  	spin_lock_irq(&callback_lock);
>  	cs->remote_partition = false;
> @@ -3956,8 +3963,9 @@ static void cpuset_hotplug_update_tasks(struct cpuset *cs, struct tmpmasks *tmp)
>  	if (remote || (is_partition_valid(cs) && is_partition_valid(parent)))
>  		compute_partition_effective_cpumask(cs, &new_cpus);
>  
> -	if (remote && cpumask_empty(&new_cpus) &&
> -	    partition_is_populated(cs, NULL)) {
> +	if (remote && (cpumask_empty(subpartitions_cpus) ||
> +			(cpumask_empty(&new_cpus) &&
> +			 partition_is_populated(cs, NULL)))) {
>  		cs->prs_err = PERR_HOTPLUG;
>  		remote_partition_disable(cs, tmp);
>  		compute_effective_cpumask(&new_cpus, cs, parent);
> @@ -3970,9 +3978,12 @@ static void cpuset_hotplug_update_tasks(struct cpuset *cs, struct tmpmasks *tmp)
>  	 * 1) empty effective cpus but not valid empty partition.
>  	 * 2) parent is invalid or doesn't grant any cpus to child
>  	 *    partitions.
> +	 * 3) subpartitions_cpus is empty.
>  	 */
> -	if (is_local_partition(cs) && (!is_partition_valid(parent) ||
> -				tasks_nocpu_error(parent, cs, &new_cpus)))
> +	if (is_local_partition(cs) &&
> +	    (!is_partition_valid(parent) ||
> +	     tasks_nocpu_error(parent, cs, &new_cpus) ||
> +	     cpumask_empty(subpartitions_cpus)))
>  		partcmd = partcmd_invalidate;
>  	/*
>  	 * On the other hand, an invalid partition root may be transitioned

Friendly ping.

-- 
Best regards,
Ridong


      reply	other threads:[~2025-12-09  2:56 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-27  3:04 [PATCH -next] cpuset: fix warning when disabling remote partition Chen Ridong
2025-12-09  2:56 ` Chen Ridong [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=d43bc75d-0a5f-41e7-b127-df6c3d26f44b@huaweicloud.com \
    --to=chenridong@huaweicloud.com \
    --cc=cgroups@vger.kernel.org \
    --cc=chenridong@huawei.com \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=lujialin4@huawei.com \
    --cc=mkoutny@suse.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).