]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commit
sched_ext: Fix is_bpf_migration_disabled() false negative on non-PREEMPT_RCU
authorChangwoo Min <changwoo@igalia.com>
Thu, 2 Apr 2026 02:31:50 +0000 (11:31 +0900)
committerTejun Heo <tj@kernel.org>
Thu, 2 Apr 2026 19:26:55 +0000 (09:26 -1000)
commit0c4a59df370bea245695c00aaae6ae75747139bd
treee5f13d7fb425103fea11b0b8b790c804ad8e7d77
parent090d34f0f0285124452373225bcc520a31e305e4
sched_ext: Fix is_bpf_migration_disabled() false negative on non-PREEMPT_RCU

Since commit 8e4f0b1ebcf2 ("bpf: use rcu_read_lock_dont_migrate() for
trampoline.c"), the BPF prolog (__bpf_prog_enter) calls migrate_disable()
only when CONFIG_PREEMPT_RCU is enabled, via rcu_read_lock_dont_migrate().
Without CONFIG_PREEMPT_RCU, the prolog never touches migration_disabled,
so migration_disabled == 1 always means the task is truly
migration-disabled regardless of whether it is the current task.

The old unconditional p == current check was a false negative in this
case, potentially allowing a migration-disabled task to be dispatched to
a remote CPU and triggering scx_error in task_can_run_on_remote_rq().

Only apply the p == current disambiguation when CONFIG_PREEMPT_RCU is
enabled, where the ambiguity with the BPF prolog still exists.

Fixes: 8e4f0b1ebcf2 ("bpf: use rcu_read_lock_dont_migrate() for trampoline.c")
Cc: stable@vger.kernel.org # v6.18+
Link: https://lore.kernel.org/lkml/20250821090609.42508-8-dongml2@chinatelecom.cn/
Signed-off-by: Changwoo Min <changwoo@igalia.com>
Reviewed-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext_idle.c