From: Andrea Righi <arighi@nvidia.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Tejun Heo <tj@kernel.org>, David Vernet <void@manifault.com>,
Changwoo Min <changwoo@igalia.com>,
John Stultz <jstultz@google.com>, Ingo Molnar <mingo@redhat.com>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Valentin Schneider <vschneid@redhat.com>,
K Prateek Nayak <kprateek.nayak@amd.com>,
Christian Loehle <christian.loehle@arm.com>,
David Dai <david.dai@linux.dev>, Emil Tsalapatis <etsal@meta.com>,
Lee Trager <ltrager@nvidia.com>,
Richard Cheng <icheng@nvidia.com>, Koba Ko <kobak@nvidia.com>,
Aiqun Yu <aiqun.yu@oss.qualcomm.com>,
sched-ext@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 09/18] sched_ext: Block proxy donors across scheduler transitions
Date: Tue, 15 Sep 2026 23:40:22 +0200 [thread overview]
Message-ID: <aqm7Rpp_xyWER5Y2@gpd4> (raw)
In-Reply-To: <20260910114158.GS788244@noisy.programming.kicks-ass.net>
On Thu, Sep 10, 2026 at 01:41:58PM +0200, Peter Zijlstra wrote:
> On Thu, Sep 10, 2026 at 12:53:35PM +0200, Peter Zijlstra wrote:
> > On Mon, Aug 31, 2026 at 03:42:19PM +0200, Andrea Righi wrote:
>
> > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> > > index f142ab455b797..4bd956182af8d 100644
> > > --- a/kernel/sched/core.c
> > > +++ b/kernel/sched/core.c
> > > @@ -11302,6 +11302,15 @@ sched_change_begin(struct task_struct *p, const struct sched_class *next_class,
> > > flags |= DEQUEUE_NOCLOCK;
> > > }
> > >
> > > + /*
> > > + * Don't carry retained proxy state across scheduling class changes.
> > > + * Compatible RT/DL PI transitions could preserve the session so that a
> > > + * boosted donor continues proxy-executing its lock owner. Defining which
> > > + * class transitions can safely retain that state is left for future work.
> > > + */
> > > + if ((flags & DEQUEUE_CLASS) && next_class != p->sched_class)
> >
> > That's a tautology, having DEQUEUE_CLASS means next_class !=
> > ->sched_class.
> >
> > > + sched_proxy_block_task(rq, p);
> > > +
> > > if ((flags & DEQUEUE_CLASS) && p->sched_class->switching_from)
> > > p->sched_class->switching_from(rq, p);
> > >
>
> > Hmmmm... I don't like this. I was expecting this
> > sched_proxy_block_task() thing to be called in the big switcheroo
> > function when loading one of these ext thing. (scx_root_enable_ or
> > somesuch).
Agreed. The cleanup is required when sched_ext takes ownership of a task, not
for every scheduling-class transition.
Calling it from sched_change_begin() also breaks proxy exec across FAIR/RT/DL
transitions. I'll move it into the sched_ext enable and task-ownership
transition paths and test that approach.
> >
> > We most certainly don't want to do this on every sched class change. It
> > isn't even gated by scx_allow_proxy_exec().
>
> Why not do:
>
> switching_to_scx():
>
> + if (!scx_allow_proxy_exec(p))
> + sched_proxy_block_task(rq, p);
The scx_allow_proxy_exec() gate makes sense, but switching_to_scx() is called
from sched_change_end(). At that point, sched_change_begin() has already saved
ctx->queued = true for the retained donor and removed it from the old class.
Calling sched_proxy_block_task() there is too late: sched_change_end() would
still see the saved ctx->queued value and enqueue the blocked task in to EXT.
Also, p->sched_class already points to EXT even though the task has not yet been
enqueued there, while sched_proxy_block_task() dequeues through the current
class.
I think the cleanup needs to happen in the sched_ext ownership-transition path
immediately before sched_change_begin(). In this way ctx->queued is recorded as
false and the task is not restored into EXT.
I'll rework it along these lines and test the sched_ext enable /
ownership-transition paths.
Thanks,
-Andrea
next prev parent reply other threads:[~2026-09-15 21:40 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-31 13:42 [PATCHSET v13 sched_ext/for-7.4] sched: Make proxy execution compatible with sched_ext Andrea Righi
2026-08-31 13:42 ` [PATCH 01/18] sched/core: Drop mutex locks before proxy rescheduling Andrea Righi
2026-08-31 13:42 ` [PATCH 02/18] sched/core: Dequeue waking proxy donors before reset Andrea Righi
2026-09-01 5:24 ` K Prateek Nayak
2026-09-08 9:28 ` Andrea Righi
2026-08-31 13:42 ` [PATCH 03/18] sched: Make NOHZ CFS bandwidth checks follow proxy donor Andrea Righi
2026-09-10 9:54 ` Peter Zijlstra
2026-09-15 15:59 ` Andrea Righi
2026-08-31 13:42 ` [PATCH 04/18] sched/core: Avoid false migration warning for proxy donors Andrea Righi
2026-09-10 10:06 ` Peter Zijlstra
2026-09-15 16:05 ` Andrea Righi
2026-09-15 17:20 ` Andrea Righi
2026-09-15 17:24 ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 05/18] sched: Pass next class to sched_change_begin() Andrea Righi
2026-09-10 10:12 ` Peter Zijlstra
2026-09-15 19:31 ` Andrea Righi
2026-08-31 13:42 ` [PATCH 06/18] sched: Add helper to block retained proxy donors Andrea Righi
2026-08-31 13:42 ` [PATCH 07/18] sched: Add sched_ext hooks for proxy execution Andrea Righi
2026-09-10 10:38 ` Peter Zijlstra
2026-09-15 20:30 ` Andrea Righi
2026-09-16 9:00 ` Peter Zijlstra
2026-09-16 15:52 ` Andrea Righi
2026-09-17 10:35 ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 08/18] sched: Introduce WF_ON_RQ wake flag Andrea Righi
2026-09-10 10:45 ` Peter Zijlstra
2026-09-15 20:55 ` Andrea Righi
2026-09-15 21:14 ` John Stultz
2026-09-16 9:19 ` Peter Zijlstra
2026-09-16 10:27 ` K Prateek Nayak
2026-09-16 10:30 ` Peter Zijlstra
2026-09-16 10:38 ` K Prateek Nayak
2026-09-16 10:41 ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 09/18] sched_ext: Block proxy donors across scheduler transitions Andrea Righi
2026-09-10 10:53 ` Peter Zijlstra
2026-09-10 11:41 ` Peter Zijlstra
2026-09-15 21:40 ` Andrea Righi [this message]
2026-08-31 13:42 ` [PATCH 10/18] sched_ext: Fix ops.running/stopping() pairing for proxy-exec donors Andrea Righi
2026-08-31 13:42 ` [PATCH 11/18] sched_ext: Move reject DSQ draining into core Andrea Righi
2026-08-31 13:42 ` [PATCH 12/18] sched_ext: Generalize the reject DSQ reenqueue path Andrea Righi
2026-09-03 22:39 ` Tejun Heo
2026-09-08 9:34 ` Andrea Righi
2026-08-31 13:42 ` [PATCH 13/18] sched_ext: Handle proxy-exec races in remote DSQ transfers Andrea Righi
2026-08-31 13:42 ` [PATCH 14/18] sched_ext: Split curr|donor references properly Andrea Righi
2026-09-10 11:47 ` Peter Zijlstra
2026-09-16 6:44 ` Andrea Righi
2026-08-31 13:42 ` [PATCH 15/18] sched_ext: Delegate proxy donor admission to BPF schedulers Andrea Righi
2026-09-10 13:39 ` Peter Zijlstra
2026-09-16 6:51 ` Andrea Righi
2026-09-10 13:41 ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 16/18] sched_ext: Add selftest for blocked donor admission Andrea Righi
2026-08-31 13:42 ` [PATCH 17/18] sched_ext: scx_qmap: Add proxy execution support Andrea Righi
2026-09-01 7:52 ` Richard Cheng
2026-09-08 9:42 ` Andrea Righi
2026-08-31 13:42 ` [PATCH 18/18] sched: Allow enabling proxy exec with sched_ext Andrea Righi
2026-09-03 22:51 ` [PATCHSET v13 sched_ext/for-7.4] sched: Make proxy execution compatible " Tejun Heo
2026-09-08 8:02 ` Peter Zijlstra
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=aqm7Rpp_xyWER5Y2@gpd4 \
--to=arighi@nvidia.com \
--cc=aiqun.yu@oss.qualcomm.com \
--cc=bsegall@google.com \
--cc=changwoo@igalia.com \
--cc=christian.loehle@arm.com \
--cc=david.dai@linux.dev \
--cc=dietmar.eggemann@arm.com \
--cc=etsal@meta.com \
--cc=icheng@nvidia.com \
--cc=jstultz@google.com \
--cc=juri.lelli@redhat.com \
--cc=kobak@nvidia.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ltrager@nvidia.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sched-ext@lists.linux.dev \
--cc=tj@kernel.org \
--cc=vincent.guittot@linaro.org \
--cc=void@manifault.com \
--cc=vschneid@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®