summaryrefslogtreecommitdiff
path: root/kernel/sysctl-test.c
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2026-10-26 14:17:41 -1000
committerTejun Heo <tj@kernel.org>2026-10-27 09:40:56 -1000
commit8197fa420ddd6cd9d3a023b63db34b798d163cc1 (patch)
tree31240cae0aa4c6abe97a3171b28712917483db7f /kernel/sysctl-test.c
parent98889f2cae365fda99b1664151bc7c9908156536 (diff)
sched_ext: Refuse extending a kernel slice
A rescuee can keep running after its grant is served, on a cpu its scheduler has lost. The write rules deny a slice extension only where the scheduler lacks SCX_CAP_BASE on the cpu, and a scheduler holding BASE but not ENQ can have a task under rescue there: 1. the scheduler extends the rescuee's slice 2. BASE is revoked. The cap-revoke eviction skips the rescuee. 3. the grant is served and scx_rescue_charge() ends the rescue 4. the task runs out the extension on the cpu its scheduler lost, outside the rescue's bandwidth A scheduler shortens or zeroes a rescuee's slice to preempt it, and scx_rescue_keep() resumes the grant afterwards. An extension serves no such purpose. Refuse extending a kernel slice in both scheduler write paths, the direct write in scx_bpf_task_set_slice() and the out-of-band application, counted in SCX_EV_SLICE_DENIED like an extension without BASE. Shortening stays allowed. scx_rescue_keep()'s restore of the remainder raises the slice from zero. Like the kernel's other slice writes, it goes through scx_set_task_slice() and not the scheduler write paths. v2: - scx_rescue_admit()'s kerneldoc no longer mentions a served-time snapshot. - SCX_EV_SLICE_DENIED's comment lists every refusal it counts. - scx_bpf_task_set_slice()'s kerneldoc says that shortening is refused on a protected slice. Fixes: 5fd501744b10 ("sched_ext: Add bandwidth-limited rescue execution for stranded tasks") Signed-off-by: Tejun Heo <tj@kernel.org> Reviewed-by: Andrea Righi <arighi@nvidia.com>
Diffstat (limited to 'kernel/sysctl-test.c')
0 files changed, 0 insertions, 0 deletions