All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: John Stultz <jstultz@google.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Joel Fernandes <joelagnelf@nvidia.com>,
	Qais Yousef <qyousef@layalina.io>, Ingo Molnar <mingo@redhat.com>,
	Juri Lelli <juri.lelli@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>,
	K Prateek Nayak <kprateek.nayak@amd.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Suleiman Souhlal <suleiman@google.com>,
	kuyo chang <kuyo.chang@mediatek.com>, hupu <hupu.gm@gmail.com>,
	kernel-team@android.com
Subject: Re: [PATCH v29 1/9] sched: Rework pick_next_task() and prev_balance() to avoid stale prev references
Date: Tue, 19 May 2026 12:32:38 +0200	[thread overview]
Message-ID: <20260519103238.GA2934902@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20260512025635.2840817-2-jstultz@google.com>

On Tue, May 12, 2026 at 02:56:11AM +0000, John Stultz wrote:
> Historically, the prev value from __schedule() was the rq->curr.
> This prev value is passed down through numerous functions, and
> used in the class scheduler implementations. The fact that
> prev was on_cpu until the end of __schedule(), meant it was
> stable across the rq lock drops that the class->pick_next_task()
> and ->balance() implementations often do.
> 
> However, with proxy-exec, the prev passed to functions called
> by __schedule() is rq->donor, which may not be the same as
> rq->curr and may not be on_cpu, this makes the prev value
> potentially unstable across rq lock drops.
> 
> A recently found issue with proxy-exec, is when we begin doing
> return migration from try_to_wake_up(), its possible we may be
> waking up the rq->donor.  When we do this, we proxy_resched_idle()
> to put_prev_set_next() setting the rq->donor to rq->idle, allowing
> the rq->donor to be return migrated and allowed to run.
> 
> This however runs into trouble, as on another cpu we might be in
> the middle of calling __schedule(). Conceptually the rq lock is
> held for the majority of the time, but in calling pick_next_task()
> its possible the class->pick_next_task() handler or the
> ->balance() call may briefly drop the rq lock. This opens a
> window for try_to_wake_up() to wake and return migrate the
> rq->donor before the class logic reacquires the rq lock.
> 
> Unfortunately pick_next_task() and prev_balance() pass in a prev
> argument, to which we pass rq->donor. However this prev value can
> now become stale and incorrect across a rq lock drop.
> 
> So, to correct this, rework the pick_next_task() and
> prev_balance() calls so that they do not take a "prev" argument.
> 
> Also rework the class ->pick_next_task() and ->balance()
> implementations to drop the prev argument, and in the cases
> where it was used, and have the class functions reference
> rq->donor directly, and not save the value across rq lock drops
> so that we don't end up with a stale references.
> 
> Signed-off-by: John Stultz <jstultz@google.com>

Right, so I think I'll take patches 1,2,3,8,9 from the flat series and
munge this on top. That gets rid of all that pick_next_task() nonsense
and simplifies things a little.

  reply	other threads:[~2026-05-19 10:32 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-12  2:56 [PATCH v29 0/9] Optimized Donor Migration for Proxy Execution John Stultz
2026-05-12  2:56 ` [PATCH v29 1/9] sched: Rework pick_next_task() and prev_balance() to avoid stale prev references John Stultz
2026-05-19 10:32   ` Peter Zijlstra [this message]
2026-05-20  2:45     ` John Stultz
2026-05-20  9:43       ` Peter Zijlstra
2026-06-04 18:45   ` [tip: sched/core] sched: Rework " tip-bot2 for John Stultz
2026-05-12  2:56 ` [PATCH v29 2/9] sched: deadline: Add some helper variables to cleanup deadline logic John Stultz
2026-06-04 18:45   ` [tip: sched/core] " tip-bot2 for John Stultz
2026-05-12  2:56 ` [PATCH v29 3/9] sched: deadline: Add dl_rq->curr pointer to address issues with Proxy Exec John Stultz
2026-06-04 18:45   ` [tip: sched/core] " tip-bot2 for John Stultz
2026-05-12  2:56 ` [PATCH v29 4/9] sched: Rework block_task so it can be directly called John Stultz
2026-06-04 18:45   ` [tip: sched/core] " tip-bot2 for John Stultz
2026-05-12  2:56 ` [PATCH v29 5/9] sched: Have try_to_wake_up() handle return-migration for PROXY_WAKING case John Stultz
2026-05-22 11:30   ` Peter Zijlstra
2026-05-22 11:35     ` Peter Zijlstra
2026-06-04 18:45   ` [tip: sched/core] " tip-bot2 for John Stultz
2026-05-12  2:56 ` [PATCH v29 6/9] sched: Add is_blocked task flag John Stultz
2026-06-04 18:45   ` [tip: sched/core] " tip-bot2 for John Stultz
2026-05-12  2:56 ` [PATCH v29 7/9] sched: Add blocked_donor link to task for smarter mutex handoffs John Stultz
2026-05-19 14:32   ` Peter Zijlstra
2026-05-19 14:46     ` Peter Zijlstra
2026-05-19 15:46     ` K Prateek Nayak
2026-05-20 18:10       ` John Stultz
2026-05-22  9:50       ` Peter Zijlstra
2026-05-20 18:09     ` John Stultz
2026-06-04 18:45   ` [tip: sched/core] " tip-bot2 for Peter Zijlstra
2026-05-12  2:56 ` [PATCH v29 8/9] sched: Break out core of attach_tasks() helper into sched.h John Stultz
2026-05-12  2:56 ` [PATCH v29 9/9] sched: Migrate whole chain in proxy_migrate_task() 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=20260519103238.GA2934902@noisy.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=Metin.Kaya@arm.com \
    --cc=boqun.feng@gmail.com \
    --cc=bsegall@google.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=kprateek.nayak@amd.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=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.