Commit 875e1705 authored by Jiri Olsa's avatar Jiri Olsa Committed by Peter Zijlstra
Browse files

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: default avatarJiri Olsa <jolsa@kernel.org>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20250720112133.244369-18-jolsa@kernel.org
parent c11661bd
Loading
Loading
Loading
Loading
+25 −13
Original line number Diff line number Diff line
@@ -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"))