On Fri, Jan 13, 2023 at 6:33 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > Add bench test for module portion of the symbols as well. > > # ./test_progs -v -t kprobe_multi_bench_attach_module > bpf_testmod.ko is already unloaded. > Loading bpf_testmod.ko... > Successfully loaded bpf_testmod.ko. > test_kprobe_multi_bench_attach:PASS:get_syms 0 nsec > test_kprobe_multi_bench_attach:PASS:kprobe_multi_empty__open_and_load 0 nsec > test_kprobe_multi_bench_attach:PASS:bpf_program__attach_kprobe_multi_opts 0 nsec > test_kprobe_multi_bench_attach: found 26620 functions > test_kprobe_multi_bench_attach: attached in 0.182s > test_kprobe_multi_bench_attach: detached in 0.082s > #96 kprobe_multi_bench_attach_module:OK > Summary: 1/0 PASSED, 0 SKIPPED, 0 FAILED > Successfully unloaded bpf_testmod.ko. > > It's useful for testing kprobe multi link modules resolving. > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > --- > .../bpf/prog_tests/kprobe_multi_test.c | 21 ++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c > index c6f37e825f11..017a6996f3fa 100644 > --- a/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c > +++ b/tools/testing/selftests/bpf/prog_tests/kprobe_multi_test.c > @@ -322,7 +322,7 @@ static bool symbol_equal(long key1, long key2, void *ctx __maybe_unused) > return strcmp((const char *) key1, (const char *) key2) == 0; > } > > -static int get_syms(char ***symsp, size_t *cntp) > +static int get_syms(char ***symsp, size_t *cntp, bool kernel) > { > size_t cap = 0, cnt = 0, i; > char *name = NULL, **syms = NULL; > @@ -349,8 +349,9 @@ static int get_syms(char ***symsp, size_t *cntp) > } > > while (fgets(buf, sizeof(buf), f)) { > - /* skip modules */ > - if (strchr(buf, '[')) > + if (kernel && strchr(buf, '[')) > + continue; > + if (!kernel && !strchr(buf, '[')) > continue; > > free(name); > @@ -404,7 +405,7 @@ static int get_syms(char ***symsp, size_t *cntp) > return err; > } > > -void serial_test_kprobe_multi_bench_attach(void) > +static void test_kprobe_multi_bench_attach(bool kernel) > { > LIBBPF_OPTS(bpf_kprobe_multi_opts, opts); > struct kprobe_multi_empty *skel = NULL; > @@ -415,7 +416,7 @@ void serial_test_kprobe_multi_bench_attach(void) > char **syms = NULL; > size_t cnt = 0, i; > > - if (!ASSERT_OK(get_syms(&syms, &cnt), "get_syms")) > + if (!ASSERT_OK(get_syms(&syms, &cnt, kernel), "get_syms")) > return; > > skel = kprobe_multi_empty__open_and_load(); > @@ -453,6 +454,16 @@ void serial_test_kprobe_multi_bench_attach(void) > } > } > > +void serial_test_kprobe_multi_bench_attach_kernel(void) > +{ > + test_kprobe_multi_bench_attach(true); > +} > + > +void serial_test_kprobe_multi_bench_attach_module(void) > +{ > + test_kprobe_multi_bench_attach(false); > +} > + minor nit: probably would be better to make kernel and module variants into subtests? > void test_kprobe_multi_test(void) > { > if (!ASSERT_OK(load_kallsyms(), "load_kallsyms")) > -- > 2.39.0 >