From: John Stultz <jstultz@google.com>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Andrea Righi <arighi@nvidia.com>,
John Stultz <jstultz@google.com>,
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>,
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: [PATCH v31 9/9] sched: Distinguish proxy activations from wakeups
Date: Fri, 24 Jul 2026 18:12:23 +0000 [thread overview]
Message-ID: <20260724181238.3445275-10-jstultz@google.com> (raw)
In-Reply-To: <20260724181238.3445275-1-jstultz@google.com>
From: Andrea Righi <arighi@nvidia.com>
Sleeping-owner handling reactivates blocked waiters with wakeup enqueue
semantics so scheduling classes can restore their runnable accounting.
Unlike a normal wakeup, the waiter remains blocked and is only made
runnable to donate its scheduling context.
Add ENQUEUE_PROXY to identify this activation and set it alongside
ENQUEUE_WAKEUP. Consume the internal marker in sched_ext and suppress
SCX_ENQ_WAKEUP before invoking BPF so the activation can be handled as
a blocked proxy donor.
Signed-off-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: John Stultz <jstultz@google.com>
---
Cc: Joel Fernandes <joelagnelf@nvidia.com>
Cc: Qais Yousef <qyousef@layalina.io>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: Vincent Guittot <vincent.guittot@linaro.org>
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: Valentin Schneider <vschneid@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ben Segall <bsegall@google.com>
Cc: Zimuzo Ezeozue <zezeozue@google.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Will Deacon <will@kernel.org>
Cc: Waiman Long <longman@redhat.com>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Metin Kaya <Metin.Kaya@arm.com>
Cc: Xuewen Yan <xuewen.yan94@gmail.com>
Cc: K Prateek Nayak <kprateek.nayak@amd.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Suleiman Souhlal <suleiman@google.com>
Cc: Andrea Righi <arighi@nvidia.com>
Cc: kuyo chang <kuyo.chang@mediatek.com>
Cc: hupu <hupu.gm@gmail.com>
Cc: kernel-team@android.com
---
kernel/sched/core.c | 2 +-
kernel/sched/ext/ext.c | 8 ++++++++
kernel/sched/sched.h | 2 ++
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index d813a9c2f0c35..c54e9fedc9cd8 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -3900,7 +3900,7 @@ static void activate_blocked_waiters(struct rq *target_rq,
{
struct list_head bal_head;
unsigned long flags;
- int en_flags = ENQUEUE_WAKEUP | ENQUEUE_NOCLOCK;
+ int en_flags = ENQUEUE_WAKEUP | ENQUEUE_NOCLOCK | ENQUEUE_PROXY;
if (!sched_proxy_exec())
return;
diff --git a/kernel/sched/ext/ext.c b/kernel/sched/ext/ext.c
index e3fa7b2fac9df..834c8b6dae6c9 100644
--- a/kernel/sched/ext/ext.c
+++ b/kernel/sched/ext/ext.c
@@ -2021,6 +2021,14 @@ static void enqueue_task_scx(struct rq *rq, struct task_struct *p, int core_enq_
int sticky_cpu = p->scx.sticky_cpu;
u64 enq_flags = core_enq_flags | rq->scx.extra_enq_flags;
+ /*
+ * Sleeping-owner activation uses wakeup semantics for the core
+ * scheduling classes, but the donor remains blocked. Expose it to BPF
+ * as a blocked-donor admission rather than a full wakeup.
+ */
+ if (core_enq_flags & ENQUEUE_PROXY)
+ enq_flags &= ~(ENQUEUE_PROXY | SCX_ENQ_WAKEUP);
+
if (enq_flags & ENQUEUE_WAKEUP)
rq->scx.flags |= SCX_RQ_IN_WAKEUP;
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 56d9c09c485e6..e38988574cfa2 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -2540,6 +2540,7 @@ extern const u32 sched_prio_to_wmult[40];
* ENQUEUE_REPLENISH - CBS (replenish runtime and postpone deadline)
* ENQUEUE_MIGRATED - the task was migrated during wakeup
* ENQUEUE_RQ_SELECTED - ->select_task_rq() was called
+ * ENQUEUE_PROXY - activate a blocked donor behind a waking owner
*
* XXX SAVE/RESTORE in combination with CLASS doesn't really make sense, but
* SCHED_DEADLINE seems to rely on this for now.
@@ -2571,6 +2572,7 @@ extern const u32 sched_prio_to_wmult[40];
#define ENQUEUE_MIGRATED 0x00040000
#define ENQUEUE_INITIAL 0x00080000
#define ENQUEUE_RQ_SELECTED 0x00100000
+#define ENQUEUE_PROXY 0x00200000
#define RETRY_TASK ((void *)-1UL)
--
2.55.0.229.g6434b31f56-goog
prev parent reply other threads:[~2026-07-24 18:12 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-24 18:12 [PATCH v31 0/9] Sleeping Owner Handling for Proxy Execution (v31) John Stultz
2026-07-24 18:12 ` [PATCH v31 1/9] sched/deadline: Ignore proxy-exec sched_yield() John Stultz
2026-07-24 18:12 ` [PATCH v31 2/9] sched/core: Don't steal a proxy-exec donor John Stultz
2026-07-24 18:12 ` [PATCH v31 3/9] sched/core: Avoid migrating blocked_on tasks John Stultz
2026-07-24 18:12 ` [PATCH v31 4/9] sched/core: Don't proxy-exec unmatched cookie lock owners John Stultz
2026-07-24 18:12 ` [PATCH v31 5/9] sched: Switch rq->next_class in proxy_reset_donor() John Stultz
2026-07-24 18:12 ` [PATCH v31 6/9] sched: Break out core of attach_tasks() helper into sched.h John Stultz
2026-07-24 18:12 ` [PATCH v31 7/9] sched: Migrate whole chain in proxy_migrate_task() John Stultz
2026-07-24 18:12 ` [PATCH v31 8/9] sched: Add deactivated (sleeping) owner handling to find_proxy_task() John Stultz
2026-07-24 18:12 ` John Stultz [this message]
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=20260724181238.3445275-10-jstultz@google.com \
--to=jstultz@google.com \
--cc=Metin.Kaya@arm.com \
--cc=arighi@nvidia.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=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=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.