[PATCH 07/15] sched_ext: Block proxy donors across scheduler transitions
Andrea Righi <[email protected]> Tue, 28 Jul 2026 17:43:25 +0200
| Newsgroups | dev.linux.lists.sched-ext,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Proxy execution retains mutex-blocked donors on the runqueue so their scheduling context can execute a lock owner. sched_ext cannot safely retain such donors unless the BPF scheduler explicitly participates in their admission and ordering. Make sched_ext reject retained donors by default. Implement scx_allow_proxy_exec() to force blocked EXT tasks through the regular block path in schedule(), and fully deactivate a retained donor before sched_setscheduler(), PI de-boosting, or global activation moves it into the EXT class. This is a preparatory change to support proxy execution with sched_ext. Acked-by: John Stultz <[email protected]> Signed-off-by: Andrea Righi <[email protected]> --- kernel/sched/ext/ext.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/kernel/sched/ext/ext.c b/kernel/sched/ext/ext.c index 8bc83070720ca..4ee27eaea8604 100644 --- a/kernel/sched/ext/ext.c +++ b/kernel/sched/ext/ext.c @@ -26,7 +26,15 @@ DEFINE_RAW_SPINLOCK(scx_sched_lock); bool scx_allow_proxy_exec(const struct task_struct *p) { - return true; + return p->sched_class != &ext_sched_class; +} + +static void prepare_switch_scx(struct rq *rq, struct task_struct *p) +{ + lockdep_assert_held(&p->pi_lock); + lockdep_assert_rq_held(rq); + + sched_proxy_block_task(rq, p); } /* @@ -4748,6 +4756,7 @@ DEFINE_SCHED_CLASS(ext) = { .task_tick = task_tick_scx, + .prepare_switch = prepare_switch_scx, .switching_to = switching_to_scx, .switched_from = switched_from_scx, .switched_to = switched_to_scx, -- 2.55.0