On Tue, Sep 6, 2022 at 3:50 PM Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx> wrote: > > On Tue, Sep 6, 2022 at 5:27 AM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > > > On Tue, 6 Sept 2022 at 05:25, Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > > > > > On Fri, 2 Sept 2022 at 15:29, Benjamin Tissoires > > > <benjamin.tissoires@xxxxxxxxxx> wrote: > > > > > > > > Similar to tools/testing/selftests/bpf/prog_tests/dynptr.c: > > > > we declare an array of tests that we run one by one in a for loop. > > > > > > > > Followup patches will add more similar-ish tests, so avoid a lot of copy > > > > paste by grouping the declaration in an array. > > > > > > > > To be able to call bpf_object__find_program_by_name(), we need to use > > > > plain libbpf calls, and not light skeletons. So also change the Makefile > > > > to not generate light skeletons. > > > > > > > > Signed-off-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx> > > > > > > > > --- > > > > > > I see your point, but this is also a test so that we keep verifying > > > kfunc call in light skeleton. > > > Code for relocating both is different in libbpf (we generate BPF ASM > > > for light skeleton so it is done inside a loader BPF program instead > > > of userspace). > > > > Err, hit send too early. > > We can probably use a macro to hide how program is called, then do > > X(prog1) > > X(prog2) > > in a series, won't look too bad and avoids duplication at the same time. > > > > > You might then be able to make it work for both light and normal skeleton. > > > > > WDYT? > > > > On this patch alone, I concede the benefit is minimum. But if you look > at 6/23, I must confess I definitely prefer having just an array of > tests at the beginning instead of crippling the tests functions with > calls or macros. > > The actual reason for me to ditch light skeletons was because I was > using bpf_object__find_program_by_name(). > > But I can work around that by relying on the offsetof() macro, and > make the whole thing working for *both* light skeleton and libbpf: > +struct kfunc_test_params { > + const char *prog_name; > + unsigned long int lskel_prog_desc_offset; > + int retval; > +}; > + > +#define TC_TEST(name,__retval) \ > + { \ > + .prog_name = #name, \ > + .lskel_prog_desc_offset = offsetof(struct > kfunc_call_test_lskel, progs.name), \ > + .retval = __retval, \ > + } > + > +static struct kfunc_test_params kfunc_tests[] = { > + TC_TEST(kfunc_call_test1, 12), > + TC_TEST(kfunc_call_test2, 3), > + TC_TEST(kfunc_call_test_ref_btf_id, 0), > +}; > + > +static void verify_success(struct kfunc_test_params *param) > { > [...] > + struct bpf_prog_desc *lskel_prog = (struct bpf_prog_desc > *)((char *)lskel + param->lskel_prog_desc_offset); > > However, for failing tests, I can not really rely on light skeletons > because we can not dynamically set the autoload property. > So either I split every failed test in its own file, or I only test > the ones that are supposed to load, which don't add a lot IMO. > > I'll repost the bpf-core changes only so you can have a better idea of > what I am saying. > FWIW, I have now sent them at [0] and dropped all of the people not in get_maintainers.pl. Cheers, Benjamin [0] https://lore.kernel.org/all/20220906151303.2780789-1-benjamin.tissoires@xxxxxxxxxx/T/#u