Re: [PATCH bpf-next 16/18] selftests/bpf: add checks for bpf_wq_set_callback()

From: Benjamin Tissoires
Date: Thu Apr 18 2024 - 04:55:52 EST


On Thu, Apr 18, 2024 at 5:25 AM Song Liu <song@xxxxxxxxxx> wrote:
>
> On Tue, Apr 16, 2024 at 7:11 AM Benjamin Tissoires <bentiss@xxxxxxxxxx> wrote:
> [...]
>
> > +SEC("?tc")
> > +__log_level(2)
> > +__failure
> > +/* check that the first argument of bpf_wq_set_callback()
> > + * is a correct bpf_wq pointer.
> > + */
> > +__msg("mark_precise: frame0: regs=r1 stack= before")
>
> This line and some other "mark_precise" lines are causing issues for
> test_progs-no_alu32 in the CI. I can reproduce it in my local tests.
>

Indeed. I can also reproduce locally. Here, it only happens for
test_wq_init_nomap() and test_wq_init_wrong_map().
TBH, I'm not sure what "precise" means, I just copied the checks from
timer_failures.c.

>
> I am not quite sure what is the best fix. Maybe we can just
> remove it.

Given that most of the code is shared with timer, but given that we
are working with kfuncs, we are not using the same r0 registers.
So yeah, I would think we could rely on the timer tests for precise,
and drop them here...

Cheers,
Benjamin

>
>
> Thanks,
> Song
>
> > +__msg(": (85) call bpf_wq_set_callback_impl#") /* anchor message */
> > +__msg("off 1 doesn't point to 'struct bpf_wq' that is at 0")
> > +long test_wrong_wq_pointer_offset(void *ctx)
> > +{
> > + int key = 0;
> > + struct bpf_wq *wq;
> > +
> > + wq = bpf_map_lookup_elem(&array, &key);
> > + if (!wq)
> > + return 1;
> > +
> > + if (bpf_wq_init(wq, &array, 0))
> > + return 2;
> > +
> > + if (bpf_wq_set_callback((void *)wq + 1, wq_cb_sleepable, 0))
> > + return 3;
> > +
> > + return -22;
> > +}
> >
> > --
> > 2.44.0
> >
>