summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2026-09-18 14:28:37 -1000
committerTejun Heo <tj@kernel.org>2026-09-19 04:08:58 -1000
commit3bd46666cfe51e2bd333fb46a0234694ca594230 (patch)
tree73b867dab1359a85a3c94b2697629297cca0c08e /scripts
parent9ec7ba20c97d92fa59b351832aeeb934b3b16177 (diff)
downloadlinux-stable-3bd46666cfe51e2bd333fb46a0234694ca594230.tar.gz
linux-stable-3bd46666cfe51e2bd333fb46a0234694ca594230.zip
sched_ext: Pass the initial cmask to cid-form ops.enable()
The cid-form API has an obvious hole. A task's cid mask is only visible through ops.set_cmask(), which fires on affinity changes and class switches but not when a task enters a scheduler through fork, sub-sched enable or re-home, and there is no p->cpus_ptr equivalent to fall back on. Schedulers work around it by seeding the mask in ops.init_task() from p->cpus_ptr cid by cid, which is subtly wrong: on sub-sched enable and re-home, an affinity change between init_task() and enable() is delivered to the sched the task is still on, and nothing corrects the new sched's copy afterwards. Fix it by adding struct scx_enable_args to cid-form ops.enable() carrying the task's cmask, built in the per-cpu scratch under the rq lock as the task enters the scheduler, and calling set_cmask() with the same mask right after enable(), ahead of set_weight(). A scheduler can then track affinity in set_cmask() alone, and scx_qmap drops its init_task() seed. set_cmask() no longer fires for a cid-form task before it is enabled, and the class-switch republish in switching_to_scx() is limited to the cpu form. This changes the cid-form ops.enable() signature, which is fine as the cid-form API is still considered unreleased. An args struct rather than a bare cmask argument leaves room for more initial state without another signature change, and the cmask travels as a plain arena address because BTF can't type arena struct members yet. v2: The cmask travels as a u64 arena address, cmask_arena_addr, instead of a kernel-typed pointer, with the typing limitation and the planned typed alias documented (Sashiko review). v3: The initial set_cmask() is delivered before set_weight() so that the mask is in place when weight-dependent state is derived (Andrea Righi). Selftest added. Signed-off-by: Tejun Heo <tj@kernel.org> Reviewed-by: Andrea Righi <arighi@nvidia.com>
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions