From: K Prateek Nayak <kprateek.nayak@amd.com>
To: John Stultz <jstultz@google.com>, Peter Zijlstra <peterz@infradead.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Christian Loehle <christian.loehle@arm.com>,
Juri Lelli <juri.lelli@redhat.com>,
Joel Fernandes <joelagnelf@nvidia.com>,
Qais Yousef <qyousef@layalina.io>, Ingo Molnar <mingo@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Valentin Schneider <vschneid@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>,
Zimuzo Ezeozue <zezeozue@google.com>,
Will Deacon <will@kernel.org>, Waiman Long <longman@redhat.com>,
Boqun Feng <boqun.feng@gmail.com>,
"Paul E. McKenney" <paulmck@kernel.org>,
Metin Kaya <Metin.Kaya@arm.com>,
Xuewen Yan <xuewen.yan94@gmail.com>,
Thomas Gleixner <tglx@linutronix.de>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Suleiman Souhlal <suleiman@google.com>,
Andrea Righi <arighi@nvidia.com>,
kuyo chang <kuyo.chang@mediatek.com>, hupu <hupu.gm@gmail.com>,
<kernel-team@android.com>
Subject: Re: [RESEND][PATCH v31 1/9] sched/deadline: Ignore proxy-exec sched_yield()
Date: Tue, 11 Aug 2026 09:25:03 +0530 [thread overview]
Message-ID: <76bf6fb3-2406-4a01-a37d-1626ef34ae18@amd.com> (raw)
In-Reply-To: <CANDhNCqEZhQe68Zet_5uc3dZCV1Q9htDV5WrENzp9EsqZL0y9w@mail.gmail.com>
Hello John, Peter,
On 8/11/2026 12:55 AM, John Stultz wrote:
> On Mon, Aug 10, 2026 at 8:57 AM Peter Zijlstra <peterz@infradead.org> wrote:
>> On Fri, Aug 07, 2026 at 03:52:07AM +0000, John Stultz wrote:
>>> From: Christian Loehle <christian.loehle@arm.com>
>>>
>>> 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@redhat.com>
>>> Signed-off-by: Christian Loehle <christian.loehle@arm.com>
>>> Signed-off-by: John Stultz <jstultz@google.com>
>>
>>> ---
>>> 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
>>
>> I am not sure...
>>
>> Yes, we should not yield the donor. However, completely ignoring the
>> yield() is also wrong.
>>
>> Now, the only way to actually hit this is by doing yield() while being a
>> lock owner. And arguably that is quite insane. But still, completely
>> ignoring it sounds wrong too.
>
> Ok. I'll drop this out of my current submission series.
>
>>
>> Can't we 'queue' the yield and have it be effective the moment the donor
>> goes away?
Question: What does rt_mutex do in this case?
From my limited understanding, for rt_mutex, we hit the is_dl_boosted(dl_se)
condition in the throttle label in update_curr_dl_se() and then we do a:
enqueue_task_dl(rq, dl_task_of(dl_se), ENQUEUE_REPLENISH);
Would same work for proxy too where we can essentially consider
"dl_task(donor) && rq->donor != rq->curr" as is_dl_boosted() and continue
with the "boost overrides the throttle" rule?
P.S. I dropped this patch and added the following on top of this
series on top of tip:sched/core and nothing has crashed (yet):
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c
index a3003b0f4522..797cb316fcd1 100644
--- a/kernel/sched/deadline.c
+++ b/kernel/sched/deadline.c
@@ -101,7 +101,11 @@ static inline struct sched_dl_entity *pi_of(struct sched_dl_entity *dl_se)
static inline bool is_dl_boosted(struct sched_dl_entity *dl_se)
{
- return false;
+ struct dl_rq *dl_rq = dl_rq_of_se(dl_se);
+ struct rq *rq = rq_of_dl_rq(dl_rq);
+
+ return sched_proxy_exec() && rq->donor != rq->curr && dl_task_of(dl_se) == rq->donor;
+
}
#endif /* !CONFIG_RT_MUTEXES */
---
I used AI to generate a module that spawns 100 threads (50 SCHED_DEADLINE,
50 SCHED_OTHER) that does 100000 iterations of yield() in a mutex critical
section and I haven't seen any splats from deadline.c yet.
I do see the deadline threads on the CPU when inspecting
/sys/kernel/debug/sched/debug and things are finishing much faster than
sched_proxy_exec=0 case so I'm assuming it is working similar to the
rt_mutex :-)
--
Thanks and Regards,
Prateek
next prev parent reply other threads:[~2026-08-11 3:55 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-07 3:52 [RESEND][PATCH v31 0/9] Sleeping Owner Handling for Proxy Execution (v31) John Stultz
2026-08-07 3:52 ` [RESEND][PATCH v31 1/9] sched/deadline: Ignore proxy-exec sched_yield() John Stultz
2026-08-10 15:56 ` Peter Zijlstra
2026-08-10 19:25 ` John Stultz
2026-08-11 3:55 ` K Prateek Nayak [this message]
2026-08-11 6:10 ` K Prateek Nayak
2026-08-11 8:33 ` Juri Lelli
2026-08-07 3:52 ` [RESEND][PATCH v31 2/9] sched/core: Don't steal a proxy-exec donor John Stultz
2026-08-07 3:52 ` [RESEND][PATCH v31 3/9] sched/core: Avoid migrating blocked_on tasks John Stultz
2026-08-07 3:52 ` [RESEND][PATCH v31 4/9] sched/core: Don't proxy-exec unmatched cookie lock owners John Stultz
2026-08-07 3:52 ` [RESEND][PATCH v31 5/9] sched: Switch rq->next_class in proxy_reset_donor() John Stultz
2026-08-07 3:52 ` [RESEND][PATCH v31 6/9] sched: Break out core of attach_tasks() helper into sched.h John Stultz
2026-08-07 3:52 ` [RESEND][PATCH v31 7/9] sched: Migrate whole chain in proxy_migrate_task() John Stultz
2026-08-07 3:52 ` [RESEND][PATCH v31 8/9] sched: Add deactivated (sleeping) owner handling to find_proxy_task() John Stultz
2026-08-07 3:52 ` [RESEND][PATCH v31 9/9] sched: Distinguish proxy activations from wakeups John Stultz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=76bf6fb3-2406-4a01-a37d-1626ef34ae18@amd.com \
--to=kprateek.nayak@amd.com \
--cc=Metin.Kaya@arm.com \
--cc=arighi@nvidia.com \
--cc=boqun.feng@gmail.com \
--cc=bsegall@google.com \
--cc=christian.loehle@arm.com \
--cc=daniel.lezcano@linaro.org \
--cc=dietmar.eggemann@arm.com \
--cc=hupu.gm@gmail.com \
--cc=joelagnelf@nvidia.com \
--cc=jstultz@google.com \
--cc=juri.lelli@redhat.com \
--cc=kernel-team@android.com \
--cc=kuyo.chang@mediatek.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=qyousef@layalina.io \
--cc=rostedt@goodmis.org \
--cc=suleiman@google.com \
--cc=tglx@linutronix.de \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=will@kernel.org \
--cc=xuewen.yan94@gmail.com \
--cc=zezeozue@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.