diff options
| author | Tejun Heo <tj@kernel.org> | 2026-10-16 19:37:17 -1000 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2026-10-17 04:35:37 -1000 |
| commit | 5809f749fbdbaf9c6b34ecbe6d2b413e56eec6e3 (patch) | |
| tree | c4d7b63f9d61ae4cb2d81ae7e0cb40a7618e1b9c /tools/perf/scripts/python/stackcollapse.py | |
| parent | 30fb2b1e4d41a641a059f295a717ffa0e24307e7 (diff) | |
sched_ext: Fix a bypassed task stalling on a cpu its scheduler has no caps on
A bypassing sub-scheduler's tasks are run by its nearest ancestor that isn't
bypassing. The ancestor puts them on the local DSQ under its own caps.
Whether such a task may stay on the cpu and whether a cap revoke reenqueues
it are still checked against the caps of the task's own scheduler.
The bypass load balancer moves tasks between cpus without looking at caps,
so a bypassed task can run on a cpu where its own scheduler holds none. Once
its slice runs out, it can't stay. It goes to the ancestor's bypass DSQ
without a kick, and the cpu can go idle with it queued until something else
reschedules the cpu.
Make both checks against the caps of the scheduler running the task. When
bypass lifts, the running task keeps its slice without a cap check, so evict
it then if it can't stay on the cpu.
Fixes: 75a8c8202c91 ("sched_ext: Add reject DSQ for cap-rejected dispatches")
Fixes: 46a85ae6fe5b ("sched_ext: Tie cpu occupancy to SCX_CAP_BASE through the task slice")
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Andrea Righi <arighi@nvidia.com>
Diffstat (limited to 'tools/perf/scripts/python/stackcollapse.py')
0 files changed, 0 insertions, 0 deletions
