[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0ee6288f-c621-4c18-bd42-22dd4aa2d826@redhat.com>
Date: Thu, 18 Sep 2025 14:02:56 -0400
From: Waiman Long <llong@...hat.com>
To: Chen Ridong <chenridong@...weicloud.com>, tj@...nel.org,
hannes@...xchg.org, mkoutny@...e.com
Cc: cgroups@...r.kernel.org, linux-kernel@...r.kernel.org,
lujialin4@...wei.com, chenridong@...wei.com
Subject: Re: [PATCH cgroup/for-next 1/2] cpuset: fix failure to enable
isolated partition when containing isolcpus
On 9/18/25 8:25 AM, Chen Ridong wrote:
> From: Chen Ridong <chenridong@...wei.com>
>
> The 'isolcpus' parameter specified at boot time can be assigned to an
> isolated partition. While it is valid put the 'isolcpus' in an isolated
> partition, attempting to change a member cpuset to an isolated partition
> will fail if the cpuset contains any 'isolcpus'.
>
> For example, the system boots with 'isolcpus=9', and the following
> configuration works correctly:
>
> # cd /sys/fs/cgroup/
> # mkdir test
> # echo 1 > test/cpuset.cpus
> # echo isolated > test/cpuset.cpus.partition
> # cat test/cpuset.cpus.partition
> isolated
> # echo 9 > test/cpuset.cpus
> # cat test/cpuset.cpus.partition
> isolated
> # cat test/cpuset.cpus
> 9
>
> However, the following steps to convert a member cpuset to an isolated
> partition will fail:
>
> # cd /sys/fs/cgroup/
> # mkdir test
> # echo 9 > test/cpuset.cpus
> # echo isolated > test/cpuset.cpus.partition
> # cat test/cpuset.cpus.partition
> isolated invalid (partition config conflicts with housekeeping setup)
>
> The issue occurs because the new partition state (new_prs) is used for
> validation against housekeeping constraints before it has been properly
> updated. To resolve this, move the assignment of new_prs before the
> housekeeping validation check when enabling a root partition.
>
> Fixes: 11e5f407b64a ("cgroup/cpuset: Keep track of CPUs in isolated partitions")
> Signed-off-by: Chen Ridong <chenridong@...wei.com>
Thanks for finding the bug. However, I think the commit to be fixed
should be 4a74e418881f ("cgroup/cpuset: Check partition conflict with
housekeeping setup"), not the one you listed above.
Cheers,
Longman
> ---
> kernel/cgroup/cpuset.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
> index 44231cb1d83f..2b7e2f17577e 100644
> --- a/kernel/cgroup/cpuset.c
> +++ b/kernel/cgroup/cpuset.c
> @@ -1806,6 +1806,7 @@ static int update_parent_effective_cpumask(struct cpuset *cs, int cmd,
> xcpus = tmp->delmask;
> if (compute_excpus(cs, xcpus))
> WARN_ON_ONCE(!cpumask_empty(cs->exclusive_cpus));
> + new_prs = (cmd == partcmd_enable) ? PRS_ROOT : PRS_ISOLATED;
>
> /*
> * Enabling partition root is not allowed if its
> @@ -1838,7 +1839,6 @@ static int update_parent_effective_cpumask(struct cpuset *cs, int cmd,
>
> deleting = true;
> subparts_delta++;
> - new_prs = (cmd == partcmd_enable) ? PRS_ROOT : PRS_ISOLATED;
> } else if (cmd == partcmd_disable) {
> /*
> * May need to add cpus back to parent's effective_cpus
Powered by blists - more mailing lists