[RFC PATCH v6 24/25] sched/core: Execute enqueued balance callbacks after migrate_disable_switch
From: Yuri Andriaccio
Date: Mon Jun 08 2026 - 08:22:22 EST
Execute balance callbacks after migrate_disable_switch.
Balancing may be requested on the __schedule path, in migrate_disable_switch,
when the running task is throttled and then pushed away from its runqueue.
Signed-off-by: Yuri Andriaccio <yurand2000@xxxxxxxxx>
---
kernel/sched/core.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 9e337f0090b3..1d458638aab9 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2410,6 +2410,9 @@ do_set_cpus_allowed(struct task_struct *p, struct affinity_context *ctx);
static void migrate_disable_switch(struct rq *rq, struct task_struct *p)
{
+ struct rq_flags rf;
+ struct balance_callback *head;
+
struct affinity_context ac = {
.new_mask = cpumask_of(rq->cpu),
.flags = SCA_MIGRATE_DISABLE,
@@ -2421,8 +2424,13 @@ static void migrate_disable_switch(struct rq *rq, struct task_struct *p)
if (p->cpus_ptr != &p->cpus_mask)
return;
- scoped_guard (task_rq_lock, p)
- do_set_cpus_allowed(p, &ac);
+ rq = task_rq_lock(p, &rf);
+
+ do_set_cpus_allowed(p, &ac);
+
+ head = splice_balance_callbacks(rq);
+ task_rq_unlock(rq, p, &rf);
+ balance_callbacks(rq, head);
}
void ___migrate_enable(void)
--
2.54.0