From: Cheng-Yang Chou Date: Mon, 13 Apr 2026 07:19:59 +0000 (+0800) Subject: tools/sched_ext: Handle migration-disabled tasks in scx_central X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=7c7bb206e87de48144e5c7249e2f7b7352f252e2;p=thirdparty%2Flinux.git tools/sched_ext: Handle migration-disabled tasks in scx_central When a task calls migrate_disable(), p->cpus_ptr is not updated until migrate_disable_switch() runs during context switch, so dispatch_to_cpu() may dequeue such a task and dispatch it to a CPU it cannot run on. Extend the mismatch check in dispatch_to_cpu() to also test is_migration_disabled() alongside the cpumask check, so tasks in this window are bounced to the fallback DSQ. Suggested-by: Andrea Righi Suggested-by: Tejun Heo Suggested-by: Kuba Piecuch Signed-off-by: Cheng-Yang Chou Reviewed-by: Kuba Piecuch Signed-off-by: Tejun Heo --- diff --git a/tools/sched_ext/scx_central.bpf.c b/tools/sched_ext/scx_central.bpf.c index 4efcce099bd52..64dd60b3e9223 100644 --- a/tools/sched_ext/scx_central.bpf.c +++ b/tools/sched_ext/scx_central.bpf.c @@ -149,10 +149,14 @@ static bool dispatch_to_cpu(s32 cpu) } /* - * If we can't run the task at the top, do the dumb thing and - * bounce it to the fallback dsq. + * If we can't run the task at the top for whatever reason, + * bounce it to the fallback dsq. Also check + * is_migration_disabled() explicitly as p->cpus_ptr may not + * reflect the migration-disabled state yet if + * migrate_disable_switch() hasn't run. */ - if (!bpf_cpumask_test_cpu(cpu, p->cpus_ptr)) { + if (!bpf_cpumask_test_cpu(cpu, p->cpus_ptr) || + (is_migration_disabled(p) && scx_bpf_task_cpu(p) != cpu)) { __sync_fetch_and_add(&nr_mismatches, 1); scx_bpf_dsq_insert(p, FALLBACK_DSQ_ID, SCX_SLICE_INF, 0); bpf_task_release(p);