[PATCH v4 0/3] cgroup: replace global percpu_rwsem with per threadgroup resem when writing to cgroup.procs
From: Yi Tao
Date: Tue Sep 09 2025 - 03:55:53 EST
Changes in v4:
- Adjust commit log and comments.
- Rename take_per_threadgroup_rwsem to cgroup_enable_per_threadgroup_rwsem and
add attr __read_mostly.
- Trigger a warning that per_threadgroup opreation can't be
disabled once enabled instead of actually turning it off.
- Split the code for retrying when the threadgroup leader changes into a
separate patch.
- Refactor the cgroup_attach_lock code to make it clearer.
Changes in v3:
- Expend commit log and comments.
- Put argument @tsk at end in cgroup_attach_lock/unlock.
- down_write global cgroup_thread_rwsem when flipping favordynmods to
synchronize with task between cgroup_threadgroup_change_begin and end.
- Rename group_rwsem to cgroup_threadgroup_rwsem.
- Fix bug causing abnormal cgroup migration due to threadgroup leader changes。
Changes in v2:
- Use favordynmods as the enabling switch.
- Determine whether to use the per-thread-group rwsem based on whether
the task is NULL.
- Fix system hang caused by acquiring cgroup_threadgroup_rwsem inside
rcu_read_lock.
Yi Tao (3):
cgroup: replace global percpu_rwsem with per threadgroup resem when
writing to cgroup.procs
cgroup: retry find task if threadgroup leader changed
cgroup: refactor the cgroup_attach_lock code to make it clearer
include/linux/cgroup-defs.h | 25 +++++-
include/linux/sched/signal.h | 4 +
init/init_task.c | 3 +
kernel/cgroup/cgroup-internal.h | 8 +-
kernel/cgroup/cgroup-v1.c | 14 +--
kernel/cgroup/cgroup.c | 149 ++++++++++++++++++++++++--------
kernel/fork.c | 4 +
7 files changed, 161 insertions(+), 46 deletions(-)
--
2.32.0.3.g01195cf9f