sched_ext: selftests/dsp_local_on: Fix sporadic failures
dsp_local_on has several incorrect assumptions, one of which is that p->nr_cpus_allowed always tracks p->cpus_ptr. This is not true when a task is scheduled out while migration is disabled - p->cpus_ptr is temporarily overridden to the previous CPU while p->nr_cpus_allowed remains unchanged. This led to sporadic test faliures when dsp_local_on_dispatch() tries to put a migration disabled task to a different CPU. Fix it by keeping the previous CPU when migration is disabled. There are SCX schedulers that make use of p->nr_cpus_allowed. They should also implement explicit handling for p->migration_disabled. Signed-off-by: Tejun Heo <tj@kernel.org> Reported-by: Ihor Solodrai <ihor.solodrai@pm.me> Cc: Andrea Righi <arighi@nvidia.com> Cc: Changwoo Min <changwoo@igalia.com>
This commit is contained in:
parent
74ca334338
commit
e9fe182772
1 changed files with 1 additions and 1 deletions
|
@ -43,7 +43,7 @@ void BPF_STRUCT_OPS(dsp_local_on_dispatch, s32 cpu, struct task_struct *prev)
|
|||
if (!p)
|
||||
return;
|
||||
|
||||
if (p->nr_cpus_allowed == nr_cpus)
|
||||
if (p->nr_cpus_allowed == nr_cpus && !p->migration_disabled)
|
||||
target = bpf_get_prandom_u32() % nr_cpus;
|
||||
else
|
||||
target = scx_bpf_task_cpu(p);
|
||||
|
|
Loading…
Add table
Reference in a new issue