[PATCH 03/16] sched/core: Mark wakeups completed through ttwu_runnable()

From: Andrea Righi

Date: Tue Sep 22 2026 - 14:38:21 EST


ttwu_runnable() completes a wakeup for a task which remains queued
without calling activate_task() or its scheduling-class enqueue
callback. Scheduling classes currently cannot distinguish this path
from wakeups which performed a full activation.

Add WF_TTWU_RQ to identify wakeups completed through ttwu_runnable().
A later sched_ext change uses it to reconsider retained proxy donors
which wake without another ops.enqueue() call.

No functional change.

Signed-off-by: Andrea Righi <arighi@xxxxxxxxxx>
---
kernel/sched/core.c | 2 +-
kernel/sched/sched.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 83b220e3a232a..124f0a5220869 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -3913,7 +3913,7 @@ static int ttwu_runnable(struct task_struct *p, int wake_flags)
* When on_rq && !on_cpu the task is preempted, see if
* it should preempt the task that is current now.
*/
- wakeup_preempt(rq, p, wake_flags);
+ wakeup_preempt(rq, p, wake_flags | WF_TTWU_RQ);
}
ttwu_do_wakeup(p);
return 1;
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 7701a5a60972c..6801d8e5c1480 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -2516,6 +2516,7 @@ static inline int task_on_rq_migrating(struct task_struct *p)
#define WF_MIGRATED 0x20 /* Internal use, task got migrated */
#define WF_CURRENT_CPU 0x40 /* Prefer to move the wakee to the current CPU. */
#define WF_RQ_SELECTED 0x80 /* ->select_task_rq() was called */
+#define WF_TTWU_RQ 0x100 /* Wakeup completed through ttwu_runnable() */

static_assert(WF_EXEC == SD_BALANCE_EXEC);
static_assert(WF_FORK == SD_BALANCE_FORK);
--
2.55.0