From: John Stultz Date: Tue, 24 Mar 2026 19:13:24 +0000 (+0000) Subject: sched: Move attach_one_task and attach_task helpers to sched.h X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=dec9554dc036183c715d02e9cfe48986d453427a;p=thirdparty%2Fkernel%2Flinux.git sched: Move attach_one_task and attach_task helpers to sched.h The fair scheduler locally introduced attach_one_task() and attach_task() helpers, but these could be generically useful so move this code to sched.h so we can use them elsewhere. One minor tweak made to utilize guard(rq_lock)(rq) to simplifiy the function. Suggested-by: K Prateek Nayak Signed-off-by: John Stultz Signed-off-by: Peter Zijlstra (Intel) Reviewed-by: K Prateek Nayak Link: https://patch.msgid.link/20260324191337.1841376-10-jstultz@google.com --- diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 7f35dd40d7efb..41293d5d9b75c 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -9946,32 +9946,6 @@ next: return detached; } -/* - * attach_task() -- attach the task detached by detach_task() to its new rq. - */ -static void attach_task(struct rq *rq, struct task_struct *p) -{ - lockdep_assert_rq_held(rq); - - WARN_ON_ONCE(task_rq(p) != rq); - activate_task(rq, p, ENQUEUE_NOCLOCK); - wakeup_preempt(rq, p, 0); -} - -/* - * attach_one_task() -- attaches the task returned from detach_one_task() to - * its new rq. - */ -static void attach_one_task(struct rq *rq, struct task_struct *p) -{ - struct rq_flags rf; - - rq_lock(rq, &rf); - update_rq_clock(rq); - attach_task(rq, p); - rq_unlock(rq, &rf); -} - /* * attach_tasks() -- attaches all tasks detached by detach_tasks() to their * new rq. diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index a2629d025c909..9594355a36811 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -3012,6 +3012,29 @@ extern void deactivate_task(struct rq *rq, struct task_struct *p, int flags); extern void wakeup_preempt(struct rq *rq, struct task_struct *p, int flags); +/* + * attach_task() -- attach the task detached by detach_task() to its new rq. + */ +static inline void attach_task(struct rq *rq, struct task_struct *p) +{ + lockdep_assert_rq_held(rq); + + WARN_ON_ONCE(task_rq(p) != rq); + activate_task(rq, p, ENQUEUE_NOCLOCK); + wakeup_preempt(rq, p, 0); +} + +/* + * attach_one_task() -- attaches the task returned from detach_one_task() to + * its new rq. + */ +static inline void attach_one_task(struct rq *rq, struct task_struct *p) +{ + guard(rq_lock)(rq); + update_rq_clock(rq); + attach_task(rq, p); +} + #ifdef CONFIG_PREEMPT_RT # define SCHED_NR_MIGRATE_BREAK 8 #else