Re: [PATCH] selftests/sched_ext: Fix the incorrect logic validation

From: Feng Yang

Date: Mon Mar 02 2026 - 03:44:06 EST


On Mon, 2 Mar 2026 08:47:17 +0100, Andrea Righi wrote:
> On Mon, Mar 02, 2026 at 02:48:51PM +0800, Feng Yang wrote:
> > From: Feng Yang <yangfeng@xxxxxxxxxx>
> >
> > When __COMPAT_scx_bpf_pick_idle_cpu_node selects an idle CPU,
> > it reports that the CPU should be marked as busy.
> >
> > Fixes: 5ae5161820e5 ("selftests/sched_ext: Add NUMA-aware scheduler test")
> > Signed-off-by: Feng Yang <yangfeng@xxxxxxxxxx>
> > ---
> > tools/testing/selftests/sched_ext/numa.bpf.c | 8 ++++----
> > 1 file changed, 4 insertions(+), 4 deletions(-)
> >
> > diff --git a/tools/testing/selftests/sched_ext/numa.bpf.c b/tools/testing/selftests/sched_ext/numa.bpf.c
> > index a79d86ed54a1..98423628b05c 100644
> > --- a/tools/testing/selftests/sched_ext/numa.bpf.c
> > +++ b/tools/testing/selftests/sched_ext/numa.bpf.c
> > @@ -44,12 +44,12 @@ s32 BPF_STRUCT_OPS(numa_select_cpu,
> > */
> > cpu = __COMPAT_scx_bpf_pick_idle_cpu_node(p->cpus_ptr, node,
> > __COMPAT_SCX_PICK_IDLE_IN_NODE);
> > - if (cpu < 0)
> > + if (cpu < 0) {
> > cpu = __COMPAT_scx_bpf_pick_any_cpu_node(p->cpus_ptr, node,
> > __COMPAT_SCX_PICK_IDLE_IN_NODE);
> > -
> > - if (is_cpu_idle(cpu, node))
> > - scx_bpf_error("CPU %d should be marked as busy", cpu);
> > + if (is_cpu_idle(cpu, node))
> > + scx_bpf_error("CPU %d should be marked as busy", cpu);
> > + }
>
> No, this is not correct. The CPU returned by scx_bpf_pick_idle_cpu_node()
> should be marked as busy at this point (bit is set in the idle cpumask),
> essentially it has been reserved/allocated by the caller.

Okay, I misunderstood.
The CI test of this patch (https://patchwork.kernel.org/project/netdevbpf/list/?series=1058866&state=*)
resulted in the error "CPU 0 should be marked as busy"(https://github.com/kernel-patches/bpf/actions/runs/22548310848/job/65314767856),
but I don't see the connection between them that would cause this error. Could you explain why this happens?

Thanks,
Feng

> Maybe we can add a comment if we think it's not clear enough, but the
> original code looks correct.
>
> >
> > if (__COMPAT_scx_bpf_cpu_node(cpu) != node)
> > scx_bpf_error("CPU %d should be in node %d", cpu, node);
> > --
> > 2.43.0
> >
>
> Thanks,
> -Andrea