]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests/bpf: Add optimized usdt variant for basic usdt test
authorJiri Olsa <jolsa@kernel.org>
Sun, 20 Jul 2025 11:21:27 +0000 (13:21 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Thu, 21 Aug 2025 18:09:24 +0000 (20:09 +0200)
Adding optimized usdt variant for basic usdt test to check that
usdt arguments are properly passed in optimized code path.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20250720112133.244369-18-jolsa@kernel.org
tools/testing/selftests/bpf/prog_tests/usdt.c

index 9057e983cc5405d8ba1521a7de5f6460bd437bf0..833eb87483a1cdb39cd4978810dbdee1e822cd28 100644 (file)
@@ -40,12 +40,19 @@ static void __always_inline trigger_func(int x) {
        }
 }
 
-static void subtest_basic_usdt(void)
+static void subtest_basic_usdt(bool optimized)
 {
        LIBBPF_OPTS(bpf_usdt_opts, opts);
        struct test_usdt *skel;
        struct test_usdt__bss *bss;
-       int err, i;
+       int err, i, called;
+
+#define TRIGGER(x) ({                  \
+       trigger_func(x);                \
+       if (optimized)                  \
+               trigger_func(x);        \
+       optimized ? 2 : 1;              \
+       })
 
        skel = test_usdt__open_and_load();
        if (!ASSERT_OK_PTR(skel, "skel_open"))
@@ -66,11 +73,11 @@ static void subtest_basic_usdt(void)
        if (!ASSERT_OK_PTR(skel->links.usdt0, "usdt0_link"))
                goto cleanup;
 
-       trigger_func(1);
+       called = TRIGGER(1);
 
-       ASSERT_EQ(bss->usdt0_called, 1, "usdt0_called");
-       ASSERT_EQ(bss->usdt3_called, 1, "usdt3_called");
-       ASSERT_EQ(bss->usdt12_called, 1, "usdt12_called");
+       ASSERT_EQ(bss->usdt0_called, called, "usdt0_called");
+       ASSERT_EQ(bss->usdt3_called, called, "usdt3_called");
+       ASSERT_EQ(bss->usdt12_called, called, "usdt12_called");
 
        ASSERT_EQ(bss->usdt0_cookie, 0xcafedeadbeeffeed, "usdt0_cookie");
        ASSERT_EQ(bss->usdt0_arg_cnt, 0, "usdt0_arg_cnt");
@@ -119,11 +126,11 @@ static void subtest_basic_usdt(void)
         * bpf_program__attach_usdt() handles this properly and attaches to
         * all possible places of USDT invocation.
         */
-       trigger_func(2);
+       called += TRIGGER(2);
 
-       ASSERT_EQ(bss->usdt0_called, 2, "usdt0_called");
-       ASSERT_EQ(bss->usdt3_called, 2, "usdt3_called");
-       ASSERT_EQ(bss->usdt12_called, 2, "usdt12_called");
+       ASSERT_EQ(bss->usdt0_called, called, "usdt0_called");
+       ASSERT_EQ(bss->usdt3_called, called, "usdt3_called");
+       ASSERT_EQ(bss->usdt12_called, called, "usdt12_called");
 
        /* only check values that depend on trigger_func()'s input value */
        ASSERT_EQ(bss->usdt3_args[0], 2, "usdt3_arg1");
@@ -142,9 +149,9 @@ static void subtest_basic_usdt(void)
        if (!ASSERT_OK_PTR(skel->links.usdt3, "usdt3_reattach"))
                goto cleanup;
 
-       trigger_func(3);
+       called += TRIGGER(3);
 
-       ASSERT_EQ(bss->usdt3_called, 3, "usdt3_called");
+       ASSERT_EQ(bss->usdt3_called, called, "usdt3_called");
        /* this time usdt3 has custom cookie */
        ASSERT_EQ(bss->usdt3_cookie, 0xBADC00C51E, "usdt3_cookie");
        ASSERT_EQ(bss->usdt3_arg_cnt, 3, "usdt3_arg_cnt");
@@ -158,6 +165,7 @@ static void subtest_basic_usdt(void)
 
 cleanup:
        test_usdt__destroy(skel);
+#undef TRIGGER
 }
 
 unsigned short test_usdt_100_semaphore SEC(".probes");
@@ -425,7 +433,11 @@ cleanup:
 void test_usdt(void)
 {
        if (test__start_subtest("basic"))
-               subtest_basic_usdt();
+               subtest_basic_usdt(false);
+#ifdef __x86_64__
+       if (test__start_subtest("basic_optimized"))
+               subtest_basic_usdt(true);
+#endif
        if (test__start_subtest("multispec"))
                subtest_multispec_usdt();
        if (test__start_subtest("urand_auto_attach"))