From: Waiman Long <longman@redhat.com>
To: "Ridong Chen" <ridong.chen@linux.dev>,
"Tejun Heo" <tj@kernel.org>,
"Johannes Weiner" <hannes@cmpxchg.org>,
"Michal Koutný" <mkoutny@suse.com>,
"Farhad Alemi" <farhad.alemi@berkeley.edu>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Shuah Khan" <shuah@kernel.org>
Cc: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org,
Aaron Tomlin <atomlin@atomlin.com>,
Guopeng Zhang <guopeng.zhang@linux.dev>,
Gregory Price <gourry@gourry.net>,
David Hildenbrand <david@kernel.org>,
Waiman Long <longman@redhat.com>
Subject: [PATCH v8 00/11] cgroup/cpuset: Support multiple source/destination cpusets for cpuset_*attach()
Date: Fri, 26 Jun 2026 14:19:12 -0400 [thread overview]
Message-ID: <20260626181923.133658-1-longman@redhat.com> (raw)
v8:
- Update patch 3 to make attach_in_progress a global flag which block
all cpuset write operations until the attach is done.
- Add a new patch 4 to collect most of the attach related variables
into a attach_ctx structure as suggested by Ridong.
- Add a test_cpuset selftest patch contributed by Michal Koutný.
- Keep the existing Reviewed-by tags as there is no functional change
to the other patches other than rename of some variables. Also add
some new tags.
v7: https://lore.kernel.org/lkml/20260621032816.1806773-1-longman@redhat.com/
- Include the fix patch from Farhad Alemi to fix a div/0 crash that
was part of the old patch 1.
- Integrated v6 patch 7 into earlier patches.
- Add a new "cgroup/cpuset: Prevent race between task attach and
cpuset state change" patch to ensure that there will be no cpuset
state change between cpuset_can_attach() and cpuset_attach() or
cpuset_cancel_attach().
- Break v6 patch 6 into 2 separate patches for supporting multiple
source cpusets and multiple destination cpusets respectively and
further simplify and streamline the code.
v6:
- Make guarantee_online_mems() to only return cs->effective_mems with v2
in patch 1.
- Remove obsolete commit description text from patch 3.
- Add Reviewed-by tags.
- In patch 6, add WARN_ON_ONCE() test in cpuset_can_attach() to
confirm that cs != oldcs.
Sashiko AI review of another cpuset patch had found that cpuset_attach()
and cpuset_can_attach() can be passed a cgroup_taskset with tasks
migrating from one source cpuset to multiple destination cpusets and
vice versa. Further testing of the cpuset code indicates that this is
indeed the case when the v2 cpuset controller is enabled or disabled.
Unfortunately, cpuset_attach() and cpuset_can_attach() still assume that
there will be one source and one destinaton cpuset which may result in
inocrrect behavior.
This patch series is created to fix this issue.
Patch 1 is a fix that fix a cgroup v2 div/0 crash due to bug in
cpuset_update_tasks_nodemask().
Patch 2 is to fix an inconsistency in the way node mask update is being
handled in cpuset_update_tasks_nodemask() and cpuset_attach() so that
they match each other.
Patch 3 makes any cpuset state change to wait for the completion of the
pending cpuset attach operation, if any.
Patch 4 collects task attach related data into a common attach_ctx
structure.
Patches 5 and 6 are just preparatory patches to make the remaining
patches easier to review.
Patch 7 makes attach_ctx.old_cs track group leader for use by
cpuset_migrate_mm().
Patch 8 moves mpol_rebind_mm() and cpuset_migrate_mm() inside
cpuset_attach_task() to make CLONE_INTO_CGROUP flag of clone(2) works
more like moving task from one cpuset to another one, while also make
supporting multiple source and destination cpusets easier.
Patch 9 makes the necessary changes to enable the support of multiple
source cpusets by keeping all the source cpusets found during task
iterations in a singly linked lists.
Patch 10 enables the support of multiple destination cpusets during the
the enabling of cpuset v2 controller.
Patch 11 adds new test case to test_cpuset to test disabling of cpuset
controller.
Farhad Alemi (1):
cgroup/cpuset: rebind mm mempolicy to effective_mems, not mems_allowed
Michal Koutný (1):
selftests/cgroup: Add test for cpuset affinity on controller disable
Waiman Long (9):
cgroup/cpuset: Fix node inconsistencies between
cpuset_update_tasks_nodemask() and cpuset_attach()
cgroup/cpuset: Prevent race between task attach and cpuset state
change
cgroup/cpuset: Put all task attach related variables into attach_ctx
cgroup/cpuset: Add a cpuset_reserve_dl_bw() helper
cgroup/cpuset: Expand the scope of cpuset_can_attach_check()
cgroup/cpuset: Make attach_ctx.old_cs track task group leader
cgroup/cpuset: Move mpol_rebind_mm/cpuset_migrate_mm() calls inside
cpuset_attach_task()
cgroup/cpuset: Support multiple source cpusets for cpuset_*attach()
cgroup/cpuset: Support multiple destination cpusets for
cpuset_*attach()
kernel/cgroup/cpuset-internal.h | 11 +-
kernel/cgroup/cpuset.c | 442 ++++++++++++-------
tools/testing/selftests/cgroup/test_cpuset.c | 243 ++++++++++
3 files changed, 541 insertions(+), 155 deletions(-)
--
2.54.0
next reply other threads:[~2026-06-26 18:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 18:19 Waiman Long [this message]
2026-06-26 18:19 ` [PATCH v8 01/11] cgroup/cpuset: rebind mm mempolicy to effective_mems, not mems_allowed Waiman Long
2026-06-26 18:19 ` [PATCH v8 02/11] cgroup/cpuset: Fix node inconsistencies between cpuset_update_tasks_nodemask() and cpuset_attach() Waiman Long
2026-06-26 18:19 ` [PATCH v8 03/11] cgroup/cpuset: Prevent race between task attach and cpuset state change Waiman Long
2026-06-29 7:14 ` Ridong Chen
2026-06-29 21:53 ` Waiman Long
2026-06-26 18:19 ` [PATCH v8 04/11] cgroup/cpuset: Put all task attach related variables into attach_ctx Waiman Long
2026-06-29 7:16 ` Ridong Chen
2026-06-26 18:19 ` [PATCH v8 05/11] cgroup/cpuset: Add a cpuset_reserve_dl_bw() helper Waiman Long
2026-06-26 18:19 ` [PATCH v8 06/11] cgroup/cpuset: Expand the scope of cpuset_can_attach_check() Waiman Long
2026-06-26 18:19 ` [PATCH v8 07/11] cgroup/cpuset: Make attach_ctx.old_cs track task group leader Waiman Long
2026-06-26 18:19 ` [PATCH v8 08/11] cgroup/cpuset: Move mpol_rebind_mm/cpuset_migrate_mm() calls inside cpuset_attach_task() Waiman Long
2026-06-26 18:19 ` [PATCH v8 09/11] cgroup/cpuset: Support multiple source cpusets for cpuset_*attach() Waiman Long
2026-06-26 18:19 ` [PATCH v8 10/11] cgroup/cpuset: Support multiple destination " Waiman Long
2026-06-26 18:19 ` [PATCH v8 11/11] selftests/cgroup: Add test for cpuset affinity on controller disable 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=20260626181923.133658-1-longman@redhat.com \
--to=longman@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=atomlin@atomlin.com \
--cc=cgroups@vger.kernel.org \
--cc=david@kernel.org \
--cc=farhad.alemi@berkeley.edu \
--cc=gourry@gourry.net \
--cc=guopeng.zhang@linux.dev \
--cc=hannes@cmpxchg.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=mkoutny@suse.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox