Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: Add optimized usdt variant for basic usdt test

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

authored by

Jiri Olsa and committed by
Peter Zijlstra
875e1705 c11661bd

+25 -13
+25 -13
tools/testing/selftests/bpf/prog_tests/usdt.c
··· 40 40 } 41 41 } 42 42 43 - static void subtest_basic_usdt(void) 43 + static void subtest_basic_usdt(bool optimized) 44 44 { 45 45 LIBBPF_OPTS(bpf_usdt_opts, opts); 46 46 struct test_usdt *skel; 47 47 struct test_usdt__bss *bss; 48 - int err, i; 48 + int err, i, called; 49 + 50 + #define TRIGGER(x) ({ \ 51 + trigger_func(x); \ 52 + if (optimized) \ 53 + trigger_func(x); \ 54 + optimized ? 2 : 1; \ 55 + }) 49 56 50 57 skel = test_usdt__open_and_load(); 51 58 if (!ASSERT_OK_PTR(skel, "skel_open")) ··· 73 66 if (!ASSERT_OK_PTR(skel->links.usdt0, "usdt0_link")) 74 67 goto cleanup; 75 68 76 - trigger_func(1); 69 + called = TRIGGER(1); 77 70 78 - ASSERT_EQ(bss->usdt0_called, 1, "usdt0_called"); 79 - ASSERT_EQ(bss->usdt3_called, 1, "usdt3_called"); 80 - ASSERT_EQ(bss->usdt12_called, 1, "usdt12_called"); 71 + ASSERT_EQ(bss->usdt0_called, called, "usdt0_called"); 72 + ASSERT_EQ(bss->usdt3_called, called, "usdt3_called"); 73 + ASSERT_EQ(bss->usdt12_called, called, "usdt12_called"); 81 74 82 75 ASSERT_EQ(bss->usdt0_cookie, 0xcafedeadbeeffeed, "usdt0_cookie"); 83 76 ASSERT_EQ(bss->usdt0_arg_cnt, 0, "usdt0_arg_cnt"); ··· 126 119 * bpf_program__attach_usdt() handles this properly and attaches to 127 120 * all possible places of USDT invocation. 128 121 */ 129 - trigger_func(2); 122 + called += TRIGGER(2); 130 123 131 - ASSERT_EQ(bss->usdt0_called, 2, "usdt0_called"); 132 - ASSERT_EQ(bss->usdt3_called, 2, "usdt3_called"); 133 - ASSERT_EQ(bss->usdt12_called, 2, "usdt12_called"); 124 + ASSERT_EQ(bss->usdt0_called, called, "usdt0_called"); 125 + ASSERT_EQ(bss->usdt3_called, called, "usdt3_called"); 126 + ASSERT_EQ(bss->usdt12_called, called, "usdt12_called"); 134 127 135 128 /* only check values that depend on trigger_func()'s input value */ 136 129 ASSERT_EQ(bss->usdt3_args[0], 2, "usdt3_arg1"); ··· 149 142 if (!ASSERT_OK_PTR(skel->links.usdt3, "usdt3_reattach")) 150 143 goto cleanup; 151 144 152 - trigger_func(3); 145 + called += TRIGGER(3); 153 146 154 - ASSERT_EQ(bss->usdt3_called, 3, "usdt3_called"); 147 + ASSERT_EQ(bss->usdt3_called, called, "usdt3_called"); 155 148 /* this time usdt3 has custom cookie */ 156 149 ASSERT_EQ(bss->usdt3_cookie, 0xBADC00C51E, "usdt3_cookie"); 157 150 ASSERT_EQ(bss->usdt3_arg_cnt, 3, "usdt3_arg_cnt"); ··· 165 158 166 159 cleanup: 167 160 test_usdt__destroy(skel); 161 + #undef TRIGGER 168 162 } 169 163 170 164 unsigned short test_usdt_100_semaphore SEC(".probes"); ··· 433 425 void test_usdt(void) 434 426 { 435 427 if (test__start_subtest("basic")) 436 - subtest_basic_usdt(); 428 + subtest_basic_usdt(false); 429 + #ifdef __x86_64__ 430 + if (test__start_subtest("basic_optimized")) 431 + subtest_basic_usdt(true); 432 + #endif 437 433 if (test__start_subtest("multispec")) 438 434 subtest_multispec_usdt(); 439 435 if (test__start_subtest("urand_auto_attach"))