[RFC PATCH 01/16] sched/core: Break activation of blocked task into a separate helper

From: K Prateek Nayak

Date: Wed Aug 26 2026 - 02:30:00 EST


Add activate_blocked_task() helper to activate a blocked task
(Blocked task is !p->on_rq || p->se.sched_delayed).

This is preparatory patch to clean up the task_on_rq_migrating() usage
in on the enqueue path in the sched_class callbacks to make way for
proxy activation on the enqueue path.

No functional changes intended.

Signed-off-by: K Prateek Nayak <kprateek.nayak@xxxxxxx>
---
kernel/sched/core.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 1bf60d78c920..7d1ffcc33fed 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2216,7 +2216,7 @@ inline bool dequeue_task(struct rq *rq, struct task_struct *p, int flags)
return p->sched_class->dequeue_task(rq, p, flags);
}

-void activate_task(struct rq *rq, struct task_struct *p, int flags)
+static void __activate_task(struct rq *rq, struct task_struct *p, int flags)
{
if (task_on_rq_migrating(p))
flags |= ENQUEUE_MIGRATED;
@@ -2227,6 +2227,16 @@ void activate_task(struct rq *rq, struct task_struct *p, int flags)
ASSERT_EXCLUSIVE_WRITER(p->on_rq);
}

+void activate_task(struct rq *rq, struct task_struct *p, int en_flags)
+{
+ __activate_task(rq, p, en_flags);
+}
+
+static void activate_blocked_task(struct rq *rq, struct task_struct *p, int en_flags)
+{
+ __activate_task(rq, p, en_flags);
+}
+
void deactivate_task(struct rq *rq, struct task_struct *p, int flags)
{
WARN_ON_ONCE(flags & DEQUEUE_SLEEP);
@@ -3822,7 +3832,7 @@ ttwu_do_activate(struct rq *rq, struct task_struct *p, int wake_flags,
atomic_dec(&task_rq(p)->nr_iowait);
}

- activate_task(rq, p, en_flags);
+ activate_blocked_task(rq, p, en_flags);
wakeup_preempt(rq, p, wake_flags);

ttwu_do_wakeup(p);
@@ -4961,7 +4971,7 @@ void wake_up_new_task(struct task_struct *p)
update_rq_clock(rq);
post_init_entity_util_avg(p);

- activate_task(rq, p, ENQUEUE_NOCLOCK | ENQUEUE_INITIAL);
+ activate_blocked_task(rq, p, ENQUEUE_NOCLOCK | ENQUEUE_INITIAL);
trace_sched_wakeup_new(p);
wakeup_preempt(rq, p, wake_flags);
if (p->sched_class->task_woken) {
--
2.34.1