[PATCH v31 1/9] sched/deadline: Ignore proxy-exec sched_yield()

From: John Stultz

Date: Fri Jul 24 2026 - 14:13:25 EST


From: Christian Loehle <christian.loehle@xxxxxxx>

With proxy execution, rq->curr is the execution context while rq->donor is
the donating context. rq->curr's sched_yield() is dispatched through
the donor class so that proxy execution follows the effective scheduling
context.

For SCHED_DEADLINE, this is too strong. yield_task_dl() does not just ask
for another task of equal priority to get to run, it marks the current DL
entity as yielded and forces it to sleep until replenishment. These
yield semantics are fundamentally different from FIFO/RR (where if no
equal-priority tasks are runnable, no harm done, they get picked again
immediately) or OTHER (also doesn't cause priority inversion), so do not
mix these semantics by ignoring a sched_yield() on DL donors.

Fixes: 127b90315ca0 ("sched/proxy: Yield the donor task")
Acked-by: Juri Lelli <juri.lelli@xxxxxxxxxx>
Signed-off-by: Christian Loehle <christian.loehle@xxxxxxx>
Signed-off-by: John Stultz <jstultz@xxxxxxxxxx>
---
Cc: Joel Fernandes <joelagnelf@xxxxxxxxxx>
Cc: Qais Yousef <qyousef@xxxxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Juri Lelli <juri.lelli@xxxxxxxxxx>
Cc: Vincent Guittot <vincent.guittot@xxxxxxxxxx>
Cc: Dietmar Eggemann <dietmar.eggemann@xxxxxxx>
Cc: Valentin Schneider <vschneid@xxxxxxxxxx>
Cc: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: Ben Segall <bsegall@xxxxxxxxxx>
Cc: Zimuzo Ezeozue <zezeozue@xxxxxxxxxx>
Cc: Will Deacon <will@xxxxxxxxxx>
Cc: Waiman Long <longman@xxxxxxxxxx>
Cc: Boqun Feng <boqun.feng@xxxxxxxxx>
Cc: "Paul E. McKenney" <paulmck@xxxxxxxxxx>
Cc: Metin Kaya <Metin.Kaya@xxxxxxx>
Cc: Xuewen Yan <xuewen.yan94@xxxxxxxxx>
Cc: K Prateek Nayak <kprateek.nayak@xxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
Cc: Suleiman Souhlal <suleiman@xxxxxxxxxx>
Cc: Andrea Righi <arighi@xxxxxxxxxx>
Cc: kuyo chang <kuyo.chang@xxxxxxxxxxxx>
Cc: hupu <hupu.gm@xxxxxxxxx>
Cc: kernel-team@xxxxxxxxxxx
---
kernel/sched/deadline.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index 0f858b98c9aa3..3e89b3abeb278 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -2574,6 +2574,9 @@ static bool dequeue_task_dl(struct rq *rq, struct task_struct *p, int flags)
*/
static void yield_task_dl(struct rq *rq)
{
+ if (sched_proxy_exec() && rq->curr != rq->donor)
+ return;
+
/*
* We make the task go to sleep until its current deadline by
* forcing its runtime to zero. This way, update_curr_dl() stops
--
2.55.0.229.g6434b31f56-goog