summaryrefslogtreecommitdiff
path: root/tools/perf/scripts/python/bin/export-to-sqlite-record
diff options
context:
space:
mode:
authorWaiman Long <longman@redhat.com>2026-07-02 17:47:49 -0400
committerTejun Heo <tj@kernel.org>2026-07-06 14:51:01 -1000
commit75f7a25ec6bb365225e60b5aa6bae397866b0cee (patch)
treebf59d19cf9fab7205847c9751918487810b45504 /tools/perf/scripts/python/bin/export-to-sqlite-record
parent4d733685148c65eb6aa52aa9b248bc501a604e39 (diff)
cgroup/cpuset: Prevent race between task attach and cpuset state change
Commit e44193d39e8d ("cpuset: let hotplug propagation work wait for task attaching") was introduced to let hotplug operation to wait until the completion of task attach operation. However, it is still possible that the states of the source or destination cpuset can be changed between the cpuset_can_attach() call and the subsequent cpuset_attach()/cpuset_cancel_attach() call. As a result, data gathered during cpuset_can_attach() cannot be reliably used in the subsequent cpuset_attach()/cpuset_cancel_attach() call at all. Make the task attach operation more robust and allow the sharing of data between cpuset_can_attach() and cpuset_attach()/cpuset_cancel_attach() by making cpuset_write_resmask() and cpuset_partition_write() wait for the completion of task attach as well. Ideally, an ongoing task attach operation should block any cpuset write operation that can change its internal state until the operation is completed. However, the attach_in_progress flag is currently per cpuset and only the destination cpuset will have this flag set. The flag is not set in the source cpuset where the tasks will be moved from. Even if we extend the scope to include the source cpuset, it will not block cpuset operation that changes the state of one of its ancestor cpuset which may indirectly impact the state of the source or destination cpuset. It may be too costly to set the flag for the whole subtree, it is far easier to just make the flag global and block all the cpuset write operation whenever a task attach operation is in progress. Make that change by creating a new cpuset attach context (attach_ctx) structure to hold the global in_progress flag and use it for blocking cpuset write operation if a cpuset attach operation is in progress. Also add a new wait_attach_done_lock() helper to do the waiting for an ongoing attach operation and acquire the cpuset_mutex. The comments about validate_change() are no longer valid as it won't be called at all if an attach operation is in progress. So the comments can be removed. The per-cpuset attach_in_progress flag is also currently used in partition_is_populated() and cpuset_is_populated() to determine if an empty cpuset will have incoming task. This check will no longer be needed as this function will not be called when there is a task attach in progress. So the flag check is now removed. Reviewed-by: Ridong Chen <ridong.chen@linux.dev> Signed-off-by: Waiman Long <longman@redhat.com> Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'tools/perf/scripts/python/bin/export-to-sqlite-record')
0 files changed, 0 insertions, 0 deletions