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

John Stultz <[email protected]>
Newsgroups org.kernel.vger.linux-kernel
Message-ID <[email protected]>
From: Christian Loehle <[email protected]>

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 <[email protected]>
Signed-off-by: Christian Loehle <[email protected]>
Signed-off-by: John Stultz <[email protected]>
---
Cc: Joel Fernandes <[email protected]>
Cc: Qais Yousef <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Juri Lelli <[email protected]>
Cc: Vincent Guittot <[email protected]>
Cc: Dietmar Eggemann <[email protected]>
Cc: Valentin Schneider <[email protected]>
Cc: Steven Rostedt <[email protected]>
Cc: Ben Segall <[email protected]>
Cc: Zimuzo Ezeozue <[email protected]>
Cc: Will Deacon <[email protected]>
Cc: Waiman Long <[email protected]>
Cc: Boqun Feng <[email protected]>
Cc: "Paul E. McKenney" <[email protected]>
Cc: Metin Kaya <[email protected]>
Cc: Xuewen Yan <[email protected]>
Cc: K Prateek Nayak <[email protected]>
Cc: Thomas Gleixner <[email protected]>
Cc: Daniel Lezcano <[email protected]>
Cc: Suleiman Souhlal <[email protected]>
Cc: Andrea Righi <[email protected]>
Cc: kuyo chang <[email protected]>
Cc: hupu <[email protected]>
Cc: [email protected]
---
 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.654.g21b8a5bc05-goog
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.