Skip to content

Commit 36a39d0

Browse files
committed
sched_ext: idle: Handle migration-disabled tasks in idle selection
JIRA: https://issues.redhat.com/browse/RHEL-111810 commit 06efc9f Author: Andrea Righi <arighi@nvidia.com> Date: Sat Jul 5 07:43:51 2025 +0200 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 <arighi@nvidia.com> Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Phil Auld <pauld@redhat.com>
1 parent 6c89574 commit 36a39d0

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
@@ -898,7 +898,7 @@ static s32 select_cpu_from_kfunc(struct task_struct *p, s32 prev_cpu, u64 wake_f
898898
* selection optimizations and simply check whether the previously
899899
* used CPU is idle and within the allowed cpumask.
900900
*/
901-
if (p->nr_cpus_allowed == 1) {
901+
if (p->nr_cpus_allowed == 1 || is_migration_disabled(p)) {
902902
if (cpumask_test_cpu(prev_cpu, allowed ?: p->cpus_ptr) &&
903903
scx_idle_test_and_clear_cpu(prev_cpu))
904904
cpu = prev_cpu;

0 commit comments

Comments
 (0)