summaryrefslogtreecommitdiff
path: root/include/linux/processor.h
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2026-05-04 14:51:21 -1000
committerTejun Heo <tj@kernel.org>2026-05-15 07:24:32 -1000
commit1dffd95575eb05bc7ec20ec096ce73be4c5d1ed5 (patch)
treea8938a9fc6c5cf1082119b12f8d03273082a6f5a /include/linux/processor.h
parentcfc1da7e1127b4c8787f4dc25d59987c10c9107f (diff)
cgroup: Defer kill_css_finish() in cgroup_apply_control_disable()
Same race shape as the rmdir path that 93618edf7538 ("cgroup: Defer css percpu_ref kill on rmdir until cgroup is depopulated") fixed: a task past exit_signals() whose cset subsys[ssid] still pins the disabled controller's css can be touching subsys state while ->css_offline() runs. The earlier patches in this series built up the per-subsys-css deferral machinery and routed cgroup_destroy_locked() through it. Apply the same shape to cgroup_apply_control_disable(): kill_css_sync(css); if (!css_is_populated(css)) kill_css_finish(css); When the dying css is still populated, kill_css_finish() is deferred. The walker in css_update_populated() fires kill_finish_work once the css's hierarchical populated count drops to zero. cgroup_lock_and_drain_offline()'s wait predicate switches from percpu_ref_is_dying() to css_is_dying(). CSS_DYING is set by kill_css_sync() and is a strict superset of percpu_ref_is_dying. Without this change, a +cpu re-enable after a deferred -cpu disable would skip the drain (percpu_ref isn't killed yet) and observe the still-CSS_DYING css through cgroup_css(), treating it as live. Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'include/linux/processor.h')
0 files changed, 0 insertions, 0 deletions