]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
sched_ext: Make scx_bpf_reenqueue_local() skip tasks that are being migrated
authorTejun Heo <tj@kernel.org>
Tue, 9 Jul 2024 22:30:26 +0000 (12:30 -1000)
committerTejun Heo <tj@kernel.org>
Tue, 9 Jul 2024 22:30:26 +0000 (12:30 -1000)
commite7a6395a889a82edb1cdcebc2c66646aca454658
tree6f77712baafb6f09530c16a1b873983a9231729a
parentfd0cf516956a0aaa4d899383ee5c2ff191418b5f
sched_ext: Make scx_bpf_reenqueue_local() skip tasks that are being migrated

When a running task is migrated to another CPU, the stop_task is used to
preempt the running task and migrate it. This, expectedly, invokes
ops.cpu_release(). If the BPF scheduler then calls
scx_bpf_reenqueue_local(), it re-enqueues all tasks on the local DSQ
including the task which is being migrated.

This creates an unnecessary re-enqueue of a task which is about to be
deactivated and re-activated for migration anyway. It can also cause
confusion for the BPF scheduler as scx_bpf_task_cpu() of the task and its
allowed CPUs may not agree while migration is pending.

Signed-off-by: Tejun Heo <tj@kernel.org>
Fixes: 245254f7081d ("sched_ext: Implement sched_ext_ops.cpu_acquire/release()")
Acked-by: David Vernet <void@manifault.com>
kernel/sched/ext.c