All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guopeng Zhang <guopeng.zhang@linux.dev>
To: "Waiman Long" <longman@redhat.com>,
	"Ridong Chen" <ridong.chen@linux.dev>,
	"Tejun Heo" <tj@kernel.org>,
	"Johannes Weiner" <hannes@cmpxchg.org>,
	"Michal Koutný" <mkoutny@suse.com>,
	"Shuah Khan" <shuah@kernel.org>,
	"Jonathan Corbet" <corbet@lwn.net>,
	"Randy Dunlap" <rdunlap@infradead.org>
Cc: cgroups@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
	Hui Peng <benquike@gmail.com>
Subject: Re: [PATCH-next v3 5/9] cgroup/cpuset: Properly disabling partition when partition state switching fails
Date: Fri, 16 Oct 2026 10:22:39 +0800	[thread overview]
Message-ID: <5c776fbf-4785-4b10-a7c4-65b54712ec94@linux.dev> (raw)
In-Reply-To: <20261014140548.575122-6-longman@redhat.com>



在 2026/10/14 22:05, Waiman Long 写道:
> Before commit 103b08709e8a ("cgroup/cpuset: Fail if isolated and nohz_full
> don't leave any housekeeping"), the partition state can be freely switched
> from "root" to "isolated" and vice versa. After that commit, the switch
> from "root" to "isolated" can fail if it exhausts all the housekeeping
> CPUs. Later on, the switch from "isolated" to "root" can also fail if
> some of the partition CPUs are boot-time isolated by "isolcpus".
> 
> A local or remote partition is made invalid when the switch fails.
> However there are 2 problems with the existing invalidation code.
> 
>  1) Both the subpartitions_cpus and isolated_cpus are not properly
>     updated.
>  2) In the case of remote partition with remote_partition flag set, it
>     is not cleared.
> 
> Fix this by calling the proper partition disabling function in this case.
> 
> On an x86 test system with boot option "isolcpus=10 cgroup_debug" set
> and more than 16 cores, the following commands were executed after boot.
> 
>   # cd /sys/fs/cgroup
>   # echo +cpuset > cgroup.subtree_control
>   # cat cpuset.cpus.isolated
>   10
>   # mkdir A
>   # echo 10-12 > A/cpuset.cpus
>   # echo isolated > A/cpuset.cpus.partition
>   # cat A/cpuset.cpus.partition
>   isolated
> 
> Before the patch:
> 
>   # echo root > A/cpuset.cpus.partition
>   # cat A/cpuset.cpus.partition
>   root invalid (partition config conflicts with housekeeping setup)
>   # cat cpuset.cpus.isolated .__DEBUG__.cpuset.cpus.subpartitions
>   10-12
>   10-12
> 
> After the patch:
> 
>   # echo root > A/cpuset.cpus.partition
>   # cat A/cpuset.cpus.partition
>   root invalid (partition config conflicts with housekeeping setup)
>   # cat cpuset.cpus.isolated .__DEBUG__.cpuset.cpus.subpartitions
>   10
> 
> Reported-by: Tejun Heo <tj@kernel.org>
> Link: https://lore.kernel.org/lkml/7f4c57b26ad120ab30adf35653f1dd94@kernel.org/
> Fixes: 4a74e418881f ("cgroup/cpuset: Check partition conflict with housekeeping setup")
> Fixes: 103b08709e8a ("cgroup/cpuset: Fail if isolated and nohz_full don't leave any housekeeping")
> Signed-off-by: Waiman Long <longman@redhat.com>
> ---
>  kernel/cgroup/cpuset.c | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
> index 51723c299ca5..40c004386af0 100644
> --- a/kernel/cgroup/cpuset.c
> +++ b/kernel/cgroup/cpuset.c
> @@ -2866,6 +2866,7 @@ static int update_prstate(struct cpuset *cs, int new_prs)
>  	struct cpuset *parent = parent_cs(cs);
>  	struct tmpmasks tmpmask;
>  	bool isolcpus_updated = false;
> +	bool disable_partition = false;
>  
>  	if (old_prs == new_prs)
>  		return 0;
> @@ -2918,15 +2919,21 @@ static int update_prstate(struct cpuset *cs, int new_prs)
>  		 * A change in load balance state only, no change in cpumasks.
>  		 * Need to update isolated_cpus.
>  		 */
> -		if (prstate_housekeeping_conflict(new_prs, cs->effective_xcpus))
> +		if (prstate_housekeeping_conflict(new_prs, cs->effective_xcpus)) {
> +			disable_partition = true;
>  			err = PERR_HKEEPING;
> -		else
> +		} else {
>  			isolcpus_updated = true;
> +		}
>  	} else {
>  		/*
>  		 * Switching back to member is always allowed even if it
>  		 * disables child partitions.
>  		 */
> +		disable_partition = true;
> +	}
> +
> +	if (disable_partition) {
>  		if (is_remote_partition(cs))
>  			remote_partition_disable(cs, &tmpmask);
>  		else
> @@ -2935,7 +2942,7 @@ static int update_prstate(struct cpuset *cs, int new_prs)
>  
>  		/*
>  		 * Invalidation of child partitions will be done in
> -		 * update_cpumasks_hier().
> +		 * update_cpumasks_hier() below.
>  		 */
>  	}
>  out:
> @@ -2954,8 +2961,8 @@ static int update_prstate(struct cpuset *cs, int new_prs)
>  		isolated_cpus_update(old_prs, new_prs, cs->effective_xcpus);
>  	spin_unlock_irq(&callback_lock);
>  
> -	/* Force update if switching back to member & update effective_xcpus */
> -	update_cpumasks_hier(cs, &tmpmask, !new_prs);
> +	/* Force update if partition is disabled & update effective_xcpus */
> +	update_cpumasks_hier(cs, &tmpmask, disable_partition);
>  
>  	/* A newly created partition must have effective_xcpus set */
>  	WARN_ON_ONCE(!old_prs && (new_prs > 0)

Reviewed-by: Guopeng Zhang <zhangguopeng@kylinos.cn>

Thanks,
Guopeng


  reply	other threads:[~2026-10-16  2:22 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-14 14:05 [PATCH-next v3 0/9] cgroup/cpuset: Fix various housekeeping check problems Waiman Long
2026-10-14 14:05 ` [PATCH-next v3 1/9] cgroup/cpuset: Fix a missing isolated_cpus update in update_cpumasks_hier() Waiman Long
2026-10-15 13:02   ` Guopeng Zhang
2026-10-14 14:05 ` [PATCH-next v3 2/9] cgroup/cpuset: Consolidate isolated_cpus_can_update() into prstate_housekeeping_conflict() Waiman Long
2026-10-15 13:03   ` Guopeng Zhang
2026-10-14 14:05 ` [PATCH-next v3 3/9] cgroup/cpuset: Consider all the exclusive CPUs when doing housekeeping check Waiman Long
2026-10-16  2:18   ` Guopeng Zhang
2026-10-14 14:05 ` [PATCH-next v3 4/9] cgroup/cpuset: Do housekeeping check before converting invalid partition to valid Waiman Long
2026-10-16  2:21   ` Guopeng Zhang
2026-10-14 14:05 ` [PATCH-next v3 5/9] cgroup/cpuset: Properly disabling partition when partition state switching fails Waiman Long
2026-10-16  2:22   ` Guopeng Zhang [this message]
2026-10-14 14:05 ` [PATCH-next v3 6/9] cgroup/cpuset: Don't allow a child root partition under an isolated parent Waiman Long
2026-10-16  3:30   ` Guopeng Zhang
2026-10-14 14:05 ` [PATCH-next v3 7/9] selftests/cgroup: Add tests for isolcpus housekeeping check Waiman Long
2026-10-16  3:32   ` Guopeng Zhang
2026-10-14 14:05 ` [PATCH-next v3 8/9] selftests/cgroup: Add tests for nohz_full " Waiman Long
2026-10-14 14:05 ` [PATCH-next v3 9/9] selftests/cgroup: Skip test_cpuset_prs.sh test if some required CPUs are offline Waiman Long

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=5c776fbf-4785-4b10-a7c4-65b54712ec94@linux.dev \
    --to=guopeng.zhang@linux.dev \
    --cc=benquike@gmail.com \
    --cc=cgroups@vger.kernel.org \
    --cc=corbet@lwn.net \
    --cc=hannes@cmpxchg.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=longman@redhat.com \
    --cc=mkoutny@suse.com \
    --cc=rdunlap@infradead.org \
    --cc=ridong.chen@linux.dev \
    --cc=shuah@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.