diff options
| author | Andrea Righi <arighi@nvidia.com> | 2026-09-22 18:51:41 +0200 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2026-09-28 08:44:38 +0200 |
| commit | 8f8c0417e97382c3473ef56b0cd472badb40e4a0 (patch) | |
| tree | bba42abf2629cff72b337baa78004b308891b8c5 /tools/lib/python/kdoc/python_version.py | |
| parent | 313b652837d0541684680a7d07a95c5560441d4f (diff) | |
sched/core: Dequeue waking proxy donors before reset
proxy_needs_return() resets an active donor while holding blocked_lock.
proxy_reset_donor() invokes scheduling-class callbacks, adding an
unnecessary raw-spinlock nesting.
For an EXT donor, resetting rq->donor first calls put_prev_task_scx()
while SCX_TASK_QUEUED and is_blocked are still set. That path reenqueues
the retained donor through scx_do_enqueue_task(), only for the following
block_task() to dequeue it again.
Split block_task() so the waking donor is first dequeued from its
scheduling class while it is still rq->donor. This lets
dequeue_task_scx() end the donor's running session and clear
SCX_TASK_QUEUED before proxy_reset_donor() invokes put_prev_task_scx().
Keep the generic on_rq state set until donor references are replaced,
then complete the runqueue removal.
This follows the normal sleep ordering, avoids transiently re-enqueuing
the waking donor, and moves the scheduling-class callbacks outside
blocked_lock.
This is a preparatory change to support proxy execution with sched_ext.
Signed-off-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260922165445.943315-3-arighi@nvidia.com
Diffstat (limited to 'tools/lib/python/kdoc/python_version.py')
0 files changed, 0 insertions, 0 deletions
