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

John Stultz <[email protected]>
Newsgroups org.kernel.vger.linux-kernel
Message-ID <CANDhNCqEZhQe68Zet_5uc3dZCV1Q9htDV5WrENzp9EsqZL0y9w@mail.gmail.com>
On Mon, Aug 10, 2026 at 8:57 AM Peter Zijlstra <[email protected]> wrote:
> On Fri, Aug 07, 2026 at 03:52:07AM +0000, John Stultz wrote:
> > 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]>
>
> > ---
> >  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?

I'll have to look more into it. It almost seems like we might be able
to set dl_yielded on the rq->curr and then return in the proxy case,
but I need to read through the paths more and would defer to Juri or
Christian.

thanks
-john
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.