On 16/3/26 15:51, Jiri Olsa wrote: > Adding tests for using cookies on tracing multi link. > > Signed-off-by: Jiri Olsa <[email protected]> > --- > .../selftests/bpf/prog_tests/tracing_multi.c | 23 +++++++++++++++++-- > .../selftests/bpf/progs/tracing_multi_check.c | 15 +++++++++++- > 2 files changed, 35 insertions(+), 3 deletions(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/tracing_multi.c > b/tools/testing/selftests/bpf/prog_tests/tracing_multi.c > index b7818f438d6e..f14a936a4667 100644 > --- a/tools/testing/selftests/bpf/prog_tests/tracing_multi.c > +++ b/tools/testing/selftests/bpf/prog_tests/tracing_multi.c > @@ -9,6 +9,19 @@ > #include "tracing_multi_intersect.skel.h" > #include "trace_helpers.h" > > +static __u64 bpf_fentry_test_cookies[] = { > + 8, /* bpf_fentry_test1 */ > + 9, /* bpf_fentry_test2 */ > + 7, /* bpf_fentry_test3 */ > + 5, /* bpf_fentry_test4 */ > + 4, /* bpf_fentry_test5 */ > + 2, /* bpf_fentry_test6 */ > + 3, /* bpf_fentry_test7 */ > + 1, /* bpf_fentry_test8 */ > + 10, /* bpf_fentry_test9 */ > + 6, /* bpf_fentry_test10 */ > +}; > + > static const char * const bpf_fentry_test[] = { > "bpf_fentry_test1", > "bpf_fentry_test2", > @@ -204,7 +217,7 @@ static void test_link_api_pattern(void) > tracing_multi__destroy(skel); > } > > -static void test_link_api_ids(void) > +static void test_link_api_ids(bool test_cookies) > { > LIBBPF_OPTS(bpf_tracing_multi_opts, opts); > struct tracing_multi *skel; > @@ -216,6 +229,7 @@ static void test_link_api_ids(void) > return; > > skel->bss->pid = getpid(); > + skel->bss->test_cookies = test_cookies; > > ids = get_ids(bpf_fentry_test, cnt, NULL); > if (!ASSERT_OK_PTR(ids, "get_ids")) > @@ -224,6 +238,9 @@ static void test_link_api_ids(void) > opts.ids = ids; > opts.cnt = cnt; > > + if (test_cookies) > + opts.cookies = bpf_fentry_test_cookies; > + > skel->links.test_fentry = > bpf_program__attach_tracing_multi(skel->progs.test_fentry, > NULL, &opts); > if (!ASSERT_OK_PTR(skel->links.test_fentry, > "bpf_program__attach_tracing_multi")) > @@ -437,7 +454,7 @@ void test_tracing_multi_test(void) > if (test__start_subtest("link_api_pattern")) > test_link_api_pattern(); > if (test__start_subtest("link_api_ids")) > - test_link_api_ids(); > + test_link_api_ids(false); > if (test__start_subtest("module_skel_api")) > test_module_skel_api(); > if (test__start_subtest("module_link_api_pattern")) > @@ -446,4 +463,6 @@ void test_tracing_multi_test(void) > test_module_link_api_ids(); > if (test__start_subtest("intersect")) > test_intersect(); > + if (test__start_subtest("cookies")) > + test_link_api_ids(true); > } > diff --git a/tools/testing/selftests/bpf/progs/tracing_multi_check.c > b/tools/testing/selftests/bpf/progs/tracing_multi_check.c > index 0e3248312dd5..e6047d5a078a 100644 > --- a/tools/testing/selftests/bpf/progs/tracing_multi_check.c > +++ b/tools/testing/selftests/bpf/progs/tracing_multi_check.c > @@ -7,6 +7,7 @@ > char _license[] SEC("license") = "GPL"; > > int pid = 0; > +bool test_cookies = false; > > extern const void bpf_fentry_test1 __ksym; > extern const void bpf_fentry_test2 __ksym; > @@ -28,7 +29,7 @@ extern const void bpf_testmod_fentry_test11 __ksym; > void tracing_multi_arg_check(__u64 *ctx, __u64 *test_result, bool is_return) > { > void *ip = (void *) bpf_get_func_ip(ctx); > - __u64 value = 0, ret = 0; > + __u64 value = 0, ret = 0, cookie = 0; > long err = 0; > > if (bpf_get_current_pid_tgid() >> 32 != pid) > @@ -36,6 +37,8 @@ void tracing_multi_arg_check(__u64 *ctx, __u64 > *test_result, bool is_return) > > if (is_return) > err |= bpf_get_func_ret(ctx, &ret); > + if (test_cookies) > + cookie = test_cookies ? bpf_get_attach_cookie(ctx) : 0; ^ dup test_cookies check ? Can drop this one.
Thanks, Leon [...]
