[tip: sched/core] sched: Break out core of attach_tasks() helper into sched.h

tip-bot2 for John Stultz posted 1 patch 3 weeks, 3 days ago
kernel/sched/fair.c  | 16 +---------------
kernel/sched/sched.h | 19 +++++++++++++++++++
2 files changed, 20 insertions(+), 15 deletions(-)
[tip: sched/core] sched: Break out core of attach_tasks() helper into sched.h
Posted by tip-bot2 for John Stultz 3 weeks, 3 days ago
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@google.com>
AuthorDate:    Fri, 07 Aug 2026 03:52:12 
Committer:     Peter Zijlstra <peterz@infradead.org>
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@amd.com>
Signed-off-by: John Stultz <jstultz@google.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://patch.msgid.link/20260807035232.1881495-7-jstultz@google.com
---
 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