Skip to content

Commit 06efc9f

Browse files
arighihtejun
authored andcommitted
sched_ext: idle: Handle migration-disabled tasks in idle selection
When SCX_OPS_ENQ_MIGRATION_DISABLED is enabled, migration-disabled tasks are also routed to ops.enqueue(). A scheduler may attempt to dispatch such tasks directly to an idle CPU using the default idle selection policy via scx_bpf_select_cpu_and() or scx_bpf_select_cpu_dfl(). This scenario must be properly handled by the built-in idle policy to avoid returning an idle CPU where the target task isn't allowed to run. Otherwise, it can lead to errors such as: EXIT: runtime error (SCX_DSQ_LOCAL[_ON] cannot move migration disabled Chrome_ChildIOT[291646] from CPU 3 to 14) Prevent this by explicitly handling migration-disabled tasks in the built-in idle selection logic, maintaining their CPU affinity. Fixes: a730e3f ("sched_ext: idle: Consolidate default idle CPU selection kfuncs") Signed-off-by: Andrea Righi <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
1 parent e14fd98 commit 06efc9f

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

kernel/sched/ext_idle.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -903,7 +903,7 @@ s32 select_cpu_from_kfunc(struct task_struct *p, s32 prev_cpu, u64 wake_flags,
903903
* selection optimizations and simply check whether the previously
904904
* used CPU is idle and within the allowed cpumask.
905905
*/
906-
if (p->nr_cpus_allowed == 1) {
906+
if (p->nr_cpus_allowed == 1 || is_migration_disabled(p)) {
907907
if (cpumask_test_cpu(prev_cpu, allowed ?: p->cpus_ptr) &&
908908
scx_idle_test_and_clear_cpu(prev_cpu))
909909
cpu = prev_cpu;

0 commit comments

Comments
 (0)