From: Andrea Righi <arighi@nvidia.com>
To: John Stultz <jstultz@google.com>
Cc: Tejun Heo <tj@kernel.org>, David Vernet <void@manifault.com>,
Changwoo Min <changwoo@igalia.com>,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
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>, Koba Ko <kobak@nvidia.com>,
Aiqun Yu <aiqun.yu@oss.qualcomm.com>,
Shuah Khan <shuah@kernel.org>,
sched-ext@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 02/10] sched_ext: Fix ops.running/stopping() pairing for proxy-exec donors
Date: Mon, 13 Jul 2026 08:45:06 +0200 [thread overview]
Message-ID: <alSJciAF-PVDKxq3@gpd4> (raw)
In-Reply-To: <alIOwoNds4x7i_bu@gpd4>
On Sat, Jul 11, 2026 at 11:37:17AM +0200, Andrea Righi wrote:
> On Fri, Jul 10, 2026 at 02:33:55PM -0700, John Stultz wrote:
> > On Fri, Jul 10, 2026 at 1:39 AM Andrea Righi <arighi@nvidia.com> wrote:
> > >
> > > With proxy-exec, pick_next_task() can return a task with blocked_on set
> > > (a proxy donor). put_prev_set_next_task() then calls set_next_task_scx()
> > > on this "ghost" task even though the task only provides scheduling
> > > context and never actually runs.
> > >
> > > Calling ops.running() for such a donor produces a spurious running
> > > event. Simply suppressing ops.running() is not sufficient because the
> > > following put_prev_task_scx() would still invoke ops.stopping(),
> > > resulting in an unpaired stopping event.
> > >
> > > Introduce SCX_TASK_IS_RUNNING to track whether a task entered a real
> > > running transition. Set and clear the flag independently of
> > > ops.running() and ops.stopping(), as the callbacks are independently
> > > optional. Invoke ops.running() only for non-blocked tasks and invoke
> > > ops.stopping() only after a real running transition. This keeps the
> > > callbacks paired for proxy donors while preserving stopping
> > > notifications for schedulers which only implement ops.stopping().
> >
> > It took me a while to understand this.
> >
> > It seems you're wanting to distinguish normal task selection and
> > execution (without proxy) from just task selection for proxy-donation
> > (where it doesn't run).
> >
> > I think what makes it confusing is that TASK_IS_RUNNING is not set for
> > the case when the task is running (rq->curr) as a lock-owning proxy
> > for a waiting donor.
> >
> > Would it maybe make it easier to follow if the flag was
> > TASK_BLOCKED_DONOR? And the logic was flipped a bit?
> >
> > That might more clearly cover the case you intend here without extra
> > edge cases that you'll have to explain (well, you're running but
> > you're not the donor and running... ).
>
> I agree that SCX_TASK_IS_RUNNING is confusing, because it doesn't describe
> really well the rq->curr/physical execution.
>
> What the flag records is whether a task entered the sched_ext running/stopping
> state. With proxy-exec, the selected scheduling context (rq->donor) and the
> physical execution context (rq->curr) can differ, which creates two relevant
> cases:
>
> 1. a blocked EXT donor goes through set_next_task_scx() even though its mutex
> owner executes instead. We must suppress ops.running() for the donor and
> remember that it did not enter the running state, so that a later
> ops.stopping() is also suppressed,
>
> 2. an EXT mutex owner can execute as rq->curr for a non-EXT donor. The owner is
> not a blocked donor, but it did not go through set_next_task_scx(), so it
> must not receive ops.stopping() if it is subsequently dequeued.
>
> So, I don't think changing the flag to SCX_TASK_BLOCKED_DONOR captures the
> required state. SCX_TASK_IS_RUNNING handles both cases by recording whether the
> task entered the sched_ext ops.running/stopping() state, independently of
> whether either callback is implemented.
>
> How about renaming it to SCX_TASK_IN_RUNNING_TRANSITION and explicitly
> documenting that this is the sched_ext callback state, not physical rq->curr
> execution? Something like:
>
> /* entered the SCX ops.running/stopping() state, not necessarily rq->curr */
> SCX_TASK_IN_RUNNING_TRANSITION = 1 << 6,
>
> Any other ideas for a more clear name?
Or perhaps SCX_TASK_RUN_TRACKED (I think I prefer this one). I did other changes
to the series, so I'll post a new version with this rename as well. Then we can
continue the discussion in the new thread.
Thanks,
-Andrea
next prev parent reply other threads:[~2026-07-13 6:45 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-10 8:36 [PATCHSET v4 sched_ext/for-7.3] sched: Make proxy execution compatible with sched_ext Andrea Righi
2026-07-10 8:36 ` [PATCH 01/10] sched/core: Drop mutex locks before proxy rescheduling Andrea Righi
2026-07-10 18:56 ` John Stultz
2026-07-10 20:47 ` Andrea Righi
2026-07-11 0:21 ` John Stultz
2026-07-11 9:04 ` Andrea Righi
2026-07-10 8:36 ` [PATCH 02/10] sched_ext: Fix ops.running/stopping() pairing for proxy-exec donors Andrea Righi
2026-07-10 21:33 ` John Stultz
2026-07-11 9:37 ` Andrea Righi
2026-07-13 6:45 ` Andrea Righi [this message]
2026-07-10 8:36 ` [PATCH 03/10] sched_ext: Split curr|donor references properly Andrea Righi
2026-07-10 8:36 ` [PATCH 04/10] sched_ext: Fix TOCTOU race in consume_remote_task() Andrea Righi
2026-07-10 8:36 ` [PATCH 05/10] sched_ext: Handle blocked donor migration with proxy execution Andrea Righi
2026-07-10 8:36 ` [PATCH 06/10] sched_ext: Delegate proxy donor admission to BPF schedulers Andrea Righi
2026-07-11 1:43 ` John Stultz
2026-07-11 8:24 ` Andrea Righi
2026-07-10 8:36 ` [PATCH 07/10] sched_ext: Add proxy destination query kfuncs Andrea Righi
2026-07-10 21:54 ` John Stultz
2026-07-11 9:07 ` Andrea Righi
2026-07-10 8:36 ` [PATCH 08/10] sched_ext: Add selftest for blocked donor admission Andrea Righi
2026-07-10 8:36 ` [PATCH 09/10] sched_ext: scx_qmap: Add proxy execution support Andrea Righi
2026-07-10 8:36 ` [PATCH 10/10] sched: Allow enabling proxy exec with sched_ext Andrea Righi
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=alSJciAF-PVDKxq3@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=jstultz@google.com \
--cc=juri.lelli@redhat.com \
--cc=kobak@nvidia.com \
--cc=kprateek.nayak@amd.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sched-ext@lists.linux.dev \
--cc=shuah@kernel.org \
--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 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.