mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
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
This commit is contained in:
parent
c11661bd9a
commit
875e1705ad
|
|
@ -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 @@ static void subtest_urandom_usdt(bool auto_attach)
|
|||
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"))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user