[tip: sched/core] sched: Break out core of attach_tasks() helper into sched.h
From: tip-bot2 for John Stultz
Date: Wed Sep 02 2026 - 04:06:37 EST
The following commit has been merged into the sched/core branch of tip:
Commit-ID: 6b73a09e943fe84778672362bfbd1cbb3fca9a8a
Gitweb: https://git.kernel.org/tip/6b73a09e943fe84778672362bfbd1cbb3fca9a8a
Author: John Stultz <jstultz@xxxxxxxxxx>
AuthorDate: Fri, 07 Aug 2026 03:52:12
Committer: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
CommitterDate: Wed, 02 Sep 2026 09:37:21 +02:00
sched: Break out core of attach_tasks() helper into sched.h
Pull the core of attach_tasks() out into sched.h so
it can be used more generically.
Suggested-by: K Prateek Nayak <kprateek.nayak@xxxxxxx>
Signed-off-by: John Stultz <jstultz@xxxxxxxxxx>
Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
Link: https://patch.msgid.link/20260807035232.1881495-7-jstultz@xxxxxxxxxx
---
kernel/sched/fair.c | 16 +---------------
kernel/sched/sched.h | 19 +++++++++++++++++++
2 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index ade1ece..b8bd308 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -11194,21 +11194,7 @@ next:
*/
static void attach_tasks(struct lb_env *env)
{
- struct list_head *tasks = &env->tasks;
- struct task_struct *p;
- struct rq_flags rf;
-
- rq_lock(env->dst_rq, &rf);
- update_rq_clock(env->dst_rq);
-
- while (!list_empty(tasks)) {
- p = list_first_entry(tasks, struct task_struct, se.group_node);
- list_del_init(&p->se.group_node);
-
- attach_task(env->dst_rq, p);
- }
-
- rq_unlock(env->dst_rq, &rf);
+ __attach_tasks(env->dst_rq, &env->tasks);
}
#ifdef CONFIG_NO_HZ_COMMON
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index e656c70..81f17e6 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -3139,6 +3139,25 @@ static inline void attach_one_task(struct rq *rq, struct task_struct *p)
attach_task(rq, p);
}
+/*
+ * __attach_tasks() - attaches a list of tasks (using se.group_node) to
+ * the new rq
+ */
+static inline void __attach_tasks(struct rq *rq, struct list_head *tasks)
+{
+ guard(rq_lock)(rq);
+ update_rq_clock(rq);
+
+ while (!list_empty(tasks)) {
+ struct task_struct *p;
+
+ p = list_first_entry(tasks, struct task_struct, se.group_node);
+ list_del_init(&p->se.group_node);
+
+ attach_task(rq, p);
+ }
+}
+
#ifdef CONFIG_PREEMPT_RT
# define SCHED_NR_MIGRATE_BREAK 8
#else