From: Yuan Chen <[email protected]>

This patch identifies whether a test item is valid by adding a valid flag to 
res.

When we test the bpf_cookies/perf_event sub-test item of test_progs, there is a
probability failure of the test item. In fact, this is not a problem, because
the corresponding perf event is not collected. This should not output the test
failure, and it is more reasonable to output SKIP. Therefore, add a valid
identifier to res to distinguish whether the test item is valid, and skip the
test item if it is invalid.

Signed-off-by: Yuan Chen <[email protected]>
---
 .../testing/selftests/bpf/prog_tests/bpf_cookie.c | 15 +++++++++++++++
 .../testing/selftests/bpf/progs/test_bpf_cookie.c |  2 ++
 2 files changed, 17 insertions(+)

diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c 
b/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c
index 070c52c312e5..e5bf4b385501 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c
@@ -456,6 +456,7 @@ static void pe_subtest(struct test_bpf_cookie *skel)
        if (!ASSERT_GE(pfd, 0, "perf_fd"))
                goto cleanup;
 
+       skel->bss->res_valid = false;
        opts.bpf_cookie = 0x100000;
        link = bpf_program__attach_perf_event_opts(skel->progs.handle_pe, pfd, 
&opts);
        if (!ASSERT_OK_PTR(link, "link1"))
@@ -463,6 +464,12 @@ static void pe_subtest(struct test_bpf_cookie *skel)
 
        burn_cpu(); /* trigger BPF prog */
 
+       if (!skel->bss->res_valid) {
+               printf("%s:SKIP:the corresponding perf event was not 
sampled.\n",
+                       __func__);
+               test__skip();
+               goto cleanup;
+       }
        ASSERT_EQ(skel->bss->pe_res, 0x100000, "pe_res1");
 
        /* prevent bpf_link__destroy() closing pfd itself */
@@ -474,6 +481,7 @@ static void pe_subtest(struct test_bpf_cookie *skel)
        link = NULL;
        kern_sync_rcu();
        skel->bss->pe_res = 0;
+       skel->bss->res_valid = false;
 
        opts.bpf_cookie = 0x200000;
        link = bpf_program__attach_perf_event_opts(skel->progs.handle_pe, pfd, 
&opts);
@@ -482,6 +490,13 @@ static void pe_subtest(struct test_bpf_cookie *skel)
 
        burn_cpu(); /* trigger BPF prog */
 
+       if (!skel->bss->res_valid) {
+               printf("%s:SKIP:the corresponding perf event was not 
sampled.\n",
+                       __func__);
+               test__skip();
+               goto cleanup;
+       }
+
        ASSERT_EQ(skel->bss->pe_res, 0x200000, "pe_res2");
 
 cleanup:
diff --git a/tools/testing/selftests/bpf/progs/test_bpf_cookie.c 
b/tools/testing/selftests/bpf/progs/test_bpf_cookie.c
index c83142b55f47..28d0ae6810d9 100644
--- a/tools/testing/selftests/bpf/progs/test_bpf_cookie.c
+++ b/tools/testing/selftests/bpf/progs/test_bpf_cookie.c
@@ -7,6 +7,7 @@
 #include <errno.h>
 
 int my_tid;
+bool res_valid;
 
 __u64 kprobe_res;
 __u64 kprobe_multi_res;
@@ -27,6 +28,7 @@ static void update(void *ctx, __u64 *res)
        if (my_tid != (u32)bpf_get_current_pid_tgid())
                return;
 
+       res_valid = true;
        *res |= bpf_get_attach_cookie(ctx);
 }
 
-- 
2.46.0


Reply via email to