From: K Prateek Nayak <kprateek.nayak@amd.com>
To: John Stultz <jstultz@google.com>, LKML <linux-kernel@vger.kernel.org>
Cc: Joel Fernandes <joelagnelf@nvidia.com>,
Qais Yousef <qyousef@layalina.io>, 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>,
Valentin Schneider <vschneid@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ben Segall <bsegall@google.com>,
Zimuzo Ezeozue <zezeozue@google.com>,
Mel Gorman <mgorman@suse.de>, 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>,
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: [RESEND][PATCH v21 2/6] sched/locking: Add blocked_on_state to provide necessary tri-state for proxy return-migration
Date: Mon, 15 Sep 2025 13:35:57 +0530 [thread overview]
Message-ID: <337322ea-6efe-4814-a813-e55d4c80fda7@amd.com> (raw)
In-Reply-To: <20250904002201.971268-3-jstultz@google.com>
Hello John,
On 9/4/2025 5:51 AM, John Stultz wrote:
> static inline void __clear_task_blocked_on(struct task_struct *p, struct mutex *m)
> {
> + /* The task should only be clearing itself */
> + WARN_ON_ONCE(p != current);
> /* Currently we serialize blocked_on under the task::blocked_lock */
> lockdep_assert_held_once(&p->blocked_lock);
> - /*
> - * There may be cases where we re-clear already cleared
> - * blocked_on relationships, but make sure we are not
> - * clearing the relationship with a different lock.
> - */
> - WARN_ON_ONCE(m && p->blocked_on && p->blocked_on != m);
> + /* Make sure we are clearing the relationship with the right lock */
> + WARN_ON_ONCE(m && p->blocked_on != m);
> p->blocked_on = NULL;
> + p->blocked_on_state = BO_RUNNABLE;
> }
>
Maybe it is just me, but I got confused a couple of time only to
realize __clear_task_blocked_on() clears the "blocked_on" and sets
"blocked_on_state" to BO_RUNNABLE.
Can we decouple the two and only set "p->blocked_on" in
*_task_blocked_on_* and "p->blocked_on_state" in
*{set,clear,force}_blocked_on* functions so it becomes easier to
follow in the mutex path as:
__set_task_blocked_on(p, mutex); // blocked on mutex
__force_blocked_on_blocked(p); // blocked from running on CPU
...
__clear_task_blocked_on(p, mutex); // p is no longer blocked on a mutex
__set_blocked_on_runnable(p); // p is now runnable
> static inline void clear_task_blocked_on(struct task_struct *p, struct mutex *m)
Of the three {set,clear}_task_blcoked_on() usage:
$ grep -r "\(set\|clear\)_task_blocked_on" include/
kernel/locking/mutex.c: __set_task_blocked_on(current, lock);
kernel/locking/mutex.c: __clear_task_blocked_on(current, lock);
kernel/locking/mutex.c: clear_task_blocked_on(current, lock);
two can be converted directly and perhaps clear_task_blocked_on() can be
renamed as clear_task_blocked_on_set_runnable()?
This is just me rambling on so feel free to ignore. I probably have to
train my mind enough to see __clear_task_blocked_on() not only clears
"blocked_on" but also sets task to runnable :)
[..snip..]
> @@ -6749,6 +6776,15 @@ find_proxy_task(struct rq *rq, struct task_struct *donor, struct rq_flags *rf)
>
> WARN_ON_ONCE(owner && !owner->on_rq);
> return owner;
> +
> + /*
> + * NOTE: This logic is down here, because we need to call
> + * the functions with the mutex wait_lock and task
> + * blocked_lock released, so we have to get out of the
> + * guard() scope.
> + */
I didn't know that was possible! Neat. Since cleanup.h has a note
reading:
... the expectation is that usage of "goto" and cleanup helpers is
never mixed in the same function.
are there any concerns w.r.t. compiler versions etc. or am I just being
paranoid?
> +deactivate_donor:
> + return proxy_deactivate(rq, donor);
> }
> #else /* SCHED_PROXY_EXEC */
> static struct task_struct *
--
Thanks and Regards,
Prateek
next prev parent reply other threads:[~2025-09-15 8:06 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-04 0:21 [RESEND][PATCH v21 0/6] Donor Migration for Proxy Execution (v21) John Stultz
2025-09-04 0:21 ` [RESEND][PATCH v21 1/6] locking: Add task::blocked_lock to serialize blocked_on state John Stultz
2025-09-12 5:50 ` K Prateek Nayak
2025-09-18 19:58 ` John Stultz
2025-09-04 0:21 ` [RESEND][PATCH v21 2/6] sched/locking: Add blocked_on_state to provide necessary tri-state for proxy return-migration John Stultz
2025-09-15 8:05 ` K Prateek Nayak [this message]
2025-09-18 22:57 ` John Stultz
2025-09-19 3:27 ` K Prateek Nayak
2025-09-23 23:34 ` John Stultz
2025-09-15 9:03 ` K Prateek Nayak
2025-09-18 23:07 ` John Stultz
2025-09-19 3:38 ` K Prateek Nayak
2025-09-04 0:21 ` [RESEND][PATCH v21 3/6] sched: Add logic to zap balance callbacks if we pick again John Stultz
2025-09-15 8:31 ` K Prateek Nayak
2025-09-19 18:34 ` John Stultz
2025-09-04 0:21 ` [RESEND][PATCH v21 4/6] sched: Handle blocked-waiter migration (and return migration) John Stultz
2025-09-15 10:06 ` K Prateek Nayak
2025-09-20 2:38 ` John Stultz
2025-09-22 4:14 ` K Prateek Nayak
2025-09-04 0:21 ` [RESEND][PATCH v21 5/6] sched: Add blocked_donor link to task for smarter mutex handoffs John Stultz
2025-09-04 0:21 ` [RESEND][PATCH v21 6/6] sched: Migrate whole chain in proxy_migrate_task() John Stultz
2025-09-11 13:59 ` [RESEND][PATCH v21 0/6] Donor Migration for Proxy Execution (v21) Juri Lelli
2025-09-11 23:21 ` John Stultz
2025-09-12 8:14 ` Juri Lelli
2025-09-16 3:19 ` K Prateek Nayak
2025-09-16 4:57 ` 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=337322ea-6efe-4814-a813-e55d4c80fda7@amd.com \
--to=kprateek.nayak@amd.com \
--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=kuyo.chang@mediatek.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mgorman@suse.de \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.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.