From: Andrea Righi <arighi@nvidia.com>
To: John Stultz <jstultz@google.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
K Prateek Nayak <kprateek.nayak@amd.com>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Valentin Schneider <vschneid@redhat.com>,
Suleiman Souhlal <suleiman@google.com>,
Metin Kaya <Metin.Kaya@arm.com>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Steven Rostedt <rostedt@goodmis.org>,
Zimuzo Ezeozue <zezeozue@google.com>,
Waiman Long <longman@redhat.com>,
Boqun Feng <boqun.feng@gmail.com>,
"Paul E. McKenney" <paulmck@kernel.org>,
Joel Fernandes <joelagnelf@nvidia.com>,
Qais Yousef <qyousef@layalina.io>,
Xuewen Yan <xuewen.yan94@gmail.com>,
kuyo chang <kuyo.chang@mediatek.com>, hupu <hupu.gm@gmail.com>,
Zhan Xusheng <zhanxusheng@xiaomi.com>,
"zhidao su (Xiaomi)" <soolaugust@gmail.com>,
Hui Su <sh_def@163.com>,
"Shubhang Kaushik (Ampere)" <sh@gentwo.org>,
kernel-team@android.com
Subject: Re: [PATCH v33 3/7] sched/core: Activate blocked donor when no owner is found
Date: Sat, 24 Oct 2026 10:33:29 +0200 [thread overview]
Message-ID: <atxtWdx0nqTRAAYw@gpd4> (raw)
In-Reply-To: <20261023220431.1106611-4-jstultz@google.com>
Hi John and Prateek,
On Fri, Oct 23, 2026 at 10:04:14PM +0000, John Stultz wrote:
> From: K Prateek Nayak <kprateek.nayak@amd.com>
>
> mutex_unlock_slowpath() follows:
>
> if (owner & MUTEX_FLAG_HANDOFF)
> break /* ... and do __mutex_handoff() */
>
> if (atomic_long_try_cmpxchg_release(&lock->owner, &owner, __owner_flags(owner))) {
> if (owner & MUTEX_FLAG_WAITERS)
> break; /* ... and wake up the forst waiter. */
>
> MUTEX_FLAG_HANDOFF is only set by first-waiter after it has been woken
> up and in absence of MUTEX_FLAG_HANDOFF, the owner clears itself from
> the lock_word and wakes up the first waiter to try a
> __mutex_trylock_or_handoff().
>
> MUTEX_FLAG_HANDOFF exists to prevent new optimistic spinners from
> trying to hijack the lock from waiter all the time and potentially
> starving them but it is not necessary for MUTEX_FLAG_HANDOFF to be
> always set in presence of a waiter.
>
> If a blocked donor is deactivated when no owner is observed, it may not
> be woken up until it becomes the first waiter and is naturally woken up
> which breaks proxy in the interim.
>
> Wake up the blocked donor and allow it to grab the lock when no owner is
> observed. If the task manages to grab the lock, the block chain will
> follow at the next proxy migration. If the task fails to grab the lock,
> same situation is restored and everyone migrated to the CPU of new
> owner.
>
> Similarly, do the same for the NULL blocked_on/mutex pointer for
> consistency.
>
> Fixes: f13beb010e4a ("sched: Have try_to_wake_up() handle return-migration for PROXY_WAKING case")
> Signed-off-by: K Prateek Nayak <kprateek.nayak@amd.com>
> Signed-off-by: John Stultz <jstultz@google.com>
> ---
...
> @@ -7013,11 +7026,11 @@ find_proxy_task(struct rq *rq, struct task_struct *donor, struct rq_flags *rf)
> struct mutex *mutex = p->blocked_on;
> if (!mutex) {
> clear_task_blocked_on(p, mutex);
> - if (task_current(rq, p)) {
> + if (task_current(rq, p) || p->wake_cpu == task_cpu(p)) {
> p->is_blocked = 0;
> return p;
> }
> - goto deactivate;
> + goto activate;
> }
IIUC, p here isn't necessarily the donor, after the first iteration it
can be an intermediate owner that is queued on this rq and blocked
itself. If its blocked_on was cleared by a handoff (or its mutex has no
owner, below), we now return it when p->wake_cpu == task_cpu(p),
skipping the sched_cpu_cookie_match() check at the end of the function.
So with CONFIG_SCHED_CORE enabled, are we running a task that was never
cookie-checked by the core-wide pick?
>
> /*
> @@ -7046,14 +7059,15 @@ find_proxy_task(struct rq *rq, struct task_struct *donor, struct rq_flags *rf)
> /*
> * If there is no owner, either clear blocked_on
> * and return p (if it is current and safe to
> - * just run on this rq), or return-migrate the task.
> + * just run on this rq), or wake the task to try
> + * and grab the lock it is blocked on.
> */
> __clear_task_blocked_on(p, NULL);
> - if (task_current(rq, p)) {
> + if (task_current(rq, p) || p->wake_cpu == task_cpu(p)) {
> p->is_blocked = 0;
> return p;
> }
> - goto deactivate;
> + goto activate;
> }
Same here.
Thanks,
-Andrea
next prev parent reply other threads:[~2026-10-24 8:33 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 22:04 [PATCH v33 0/7] Sleeping Owner Handling for Proxy Execution (v33) John Stultz
2026-10-23 22:04 ` [PATCH v33 1/7] sched/psi: Preserve sleep-persistent PSI flags on off-CPU sleeping dequeues John Stultz
2026-10-24 11:44 ` Peter Zijlstra
2026-10-26 5:00 ` K Prateek Nayak
2026-10-26 4:32 ` K Prateek Nayak
2026-10-26 5:16 ` Zhan Xusheng
2026-10-29 22:02 ` Tejun Heo
2026-10-23 22:04 ` [PATCH v33 2/7] sched/core: Use the scheduling context for remote ticks John Stultz
2026-10-24 13:44 ` Kayra Cizmeci
2026-10-23 22:04 ` [PATCH v33 3/7] sched/core: Activate blocked donor when no owner is found John Stultz
2026-10-24 8:33 ` Andrea Righi [this message]
2026-10-26 3:02 ` K Prateek Nayak
2026-10-23 22:04 ` [PATCH v33 4/7] sched/proxy: Set TASK_RUNNING when shortcuting return migration John Stultz
2026-10-24 8:36 ` Andrea Righi
2026-10-26 3:09 ` K Prateek Nayak
2026-10-23 22:04 ` [PATCH v33 5/7] sched/proxy: Break cyclic proxy chains by deactivating blocked tasks John Stultz
2026-10-24 21:19 ` Kayra Cizmeci
2026-10-23 22:04 ` [PATCH v33 6/7] sched/proxy: Detect cycles in proxy walks earlier John Stultz
2026-10-24 15:34 ` Kayra Cizmeci
2026-10-23 22:04 ` [PATCH v33 7/7] sched/proxy: Add deactivated (sleeping) owner handling to find_proxy_task() John Stultz
2026-10-24 9:07 ` Andrea Righi
2026-10-26 4:26 ` K Prateek Nayak
2026-10-27 16:22 ` Juri Lelli
2026-10-28 3:36 ` K Prateek Nayak
2026-10-28 10:01 ` Juri Lelli
2026-10-28 10:11 ` K Prateek Nayak
2026-10-28 10:36 ` Juri Lelli
2026-10-29 3:27 ` K Prateek Nayak
2026-10-26 7:40 ` K Prateek Nayak
2026-10-26 19:59 ` Kayra Cizmeci
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=atxtWdx0nqTRAAYw@gpd4 \
--to=arighi@nvidia.com \
--cc=Metin.Kaya@arm.com \
--cc=boqun.feng@gmail.com \
--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=peterz@infradead.org \
--cc=qyousef@layalina.io \
--cc=rostedt@goodmis.org \
--cc=sh@gentwo.org \
--cc=sh_def@163.com \
--cc=soolaugust@gmail.com \
--cc=suleiman@google.com \
--cc=tglx@linutronix.de \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=xuewen.yan94@gmail.com \
--cc=zezeozue@google.com \
--cc=zhanxusheng@xiaomi.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.