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 f6ff1668d88f..1bab4c3ea808 100644
--- a/tools/testing/selftests/bpf/prog_tests/tracing_multi.c
+++ b/tools/testing/selftests/bpf/prog_tests/tracing_multi.c
@@ -8,6 +8,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",
@@ -176,7 +189,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 = NULL;
@@ -188,6 +201,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);
        if (!ASSERT_OK_PTR(ids, "get_ids"))
@@ -196,6 +210,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"))
@@ -306,7 +323,9 @@ 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("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 fe7d1708cda5..c800e537b6b5 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;
@@ -22,7 +23,7 @@ extern const void bpf_fentry_test10 __ksym;
 int 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)
@@ -30,6 +31,8 @@ int 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;
 
        if (ip == &bpf_fentry_test1) {
                int a;
@@ -38,6 +41,7 @@ int tracing_multi_arg_check(__u64 *ctx, __u64 *test_result, 
bool is_return)
                a = (int) value;
 
                err |= is_return ? ret != 2 : 0;
+               err |= test_cookies ? cookie != 8 : 0;
 
                *test_result += err == 0 && a == 1;
        } else if (ip == &bpf_fentry_test2) {
@@ -50,6 +54,7 @@ int tracing_multi_arg_check(__u64 *ctx, __u64 *test_result, 
bool is_return)
                b = value;
 
                err |= is_return ? ret != 5 : 0;
+               err |= test_cookies ? cookie != 9 : 0;
 
                *test_result += err == 0 && a == 2 && b == 3;
        } else if (ip == &bpf_fentry_test3) {
@@ -65,6 +70,7 @@ int tracing_multi_arg_check(__u64 *ctx, __u64 *test_result, 
bool is_return)
                c = value;
 
                err |= is_return ? ret != 15 : 0;
+               err |= test_cookies ? cookie != 7 : 0;
 
                *test_result += err == 0 && a == 4 && b == 5 && c == 6;
        } else if (ip == &bpf_fentry_test4) {
@@ -83,6 +89,7 @@ int tracing_multi_arg_check(__u64 *ctx, __u64 *test_result, 
bool is_return)
                d = value;
 
                err |= is_return ? ret != 34 : 0;
+               err |= test_cookies ? cookie != 5 : 0;
 
                *test_result += err == 0 && a == (void *) 7 && b == 8 && c == 9 
&& d == 10;
        } else if (ip == &bpf_fentry_test5) {
@@ -104,6 +111,7 @@ int tracing_multi_arg_check(__u64 *ctx, __u64 *test_result, 
bool is_return)
                e = value;
 
                err |= is_return ? ret != 65 : 0;
+               err |= test_cookies ? cookie != 4 : 0;
 
                *test_result += err == 0 && a == 11 && b == (void *) 12 && c == 
13 && d == 14 && e == 15;
        } else if (ip == &bpf_fentry_test6) {
@@ -128,22 +136,27 @@ int tracing_multi_arg_check(__u64 *ctx, __u64 
*test_result, bool is_return)
                f = value;
 
                err |= is_return ? ret != 111 : 0;
+               err |= test_cookies ? cookie != 2 : 0;
 
                *test_result += err == 0 && a == 16 && b == (void *) 17 && c == 
18 && d == 19 && e == (void *) 20 && f == 21;
        } else if (ip == &bpf_fentry_test7) {
                err |= is_return ? ret != 0 : 0;
+               err |= test_cookies ? cookie != 3 : 0;
 
                *test_result += err == 0 ? 1 : 0;
        } else if (ip == &bpf_fentry_test8) {
                err |= is_return ? ret != 0 : 0;
+               err |= test_cookies ? cookie != 1 : 0;
 
                *test_result += err == 0 ? 1 : 0;
        } else if (ip == &bpf_fentry_test9) {
                err |= is_return ? ret != 0 : 0;
+               err |= test_cookies ? cookie != 10 : 0;
 
                *test_result += err == 0 ? 1 : 0;
        } else if (ip == &bpf_fentry_test10) {
                err |= is_return ? ret != 0 : 0;
+               err |= test_cookies ? cookie != 6 : 0;
 
                *test_result += err == 0 ? 1 : 0;
        }
-- 
2.52.0


Reply via email to