diff options
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests')
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/bpf_loop.c | 62 | ||||
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/btf.c | 1 | 
2 files changed, 62 insertions, 1 deletions
| diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_loop.c b/tools/testing/selftests/bpf/prog_tests/bpf_loop.c index 380d7a2072e3..4cd8a25afe68 100644 --- a/tools/testing/selftests/bpf/prog_tests/bpf_loop.c +++ b/tools/testing/selftests/bpf/prog_tests/bpf_loop.c @@ -120,6 +120,64 @@ static void check_nested_calls(struct bpf_loop *skel)  	bpf_link__destroy(link);  } +static void check_non_constant_callback(struct bpf_loop *skel) +{ +	struct bpf_link *link = +		bpf_program__attach(skel->progs.prog_non_constant_callback); + +	if (!ASSERT_OK_PTR(link, "link")) +		return; + +	skel->bss->callback_selector = 0x0F; +	usleep(1); +	ASSERT_EQ(skel->bss->g_output, 0x0F, "g_output #1"); + +	skel->bss->callback_selector = 0xF0; +	usleep(1); +	ASSERT_EQ(skel->bss->g_output, 0xF0, "g_output #2"); + +	bpf_link__destroy(link); +} + +static void check_stack(struct bpf_loop *skel) +{ +	struct bpf_link *link = bpf_program__attach(skel->progs.stack_check); +	const int max_key = 12; +	int key; +	int map_fd; + +	if (!ASSERT_OK_PTR(link, "link")) +		return; + +	map_fd = bpf_map__fd(skel->maps.map1); + +	if (!ASSERT_GE(map_fd, 0, "bpf_map__fd")) +		goto out; + +	for (key = 1; key <= max_key; ++key) { +		int val = key; +		int err = bpf_map_update_elem(map_fd, &key, &val, BPF_NOEXIST); + +		if (!ASSERT_OK(err, "bpf_map_update_elem")) +			goto out; +	} + +	usleep(1); + +	for (key = 1; key <= max_key; ++key) { +		int val; +		int err = bpf_map_lookup_elem(map_fd, &key, &val); + +		if (!ASSERT_OK(err, "bpf_map_lookup_elem")) +			goto out; +		if (!ASSERT_EQ(val, key + 1, "bad value in the map")) +			goto out; +	} + +out: +	bpf_link__destroy(link); +} +  void test_bpf_loop(void)  {  	struct bpf_loop *skel; @@ -140,6 +198,10 @@ void test_bpf_loop(void)  		check_invalid_flags(skel);  	if (test__start_subtest("check_nested_calls"))  		check_nested_calls(skel); +	if (test__start_subtest("check_non_constant_callback")) +		check_non_constant_callback(skel); +	if (test__start_subtest("check_stack")) +		check_stack(skel);  	bpf_loop__destroy(skel);  } diff --git a/tools/testing/selftests/bpf/prog_tests/btf.c b/tools/testing/selftests/bpf/prog_tests/btf.c index edb387163baa..1fd792a92a1c 100644 --- a/tools/testing/selftests/bpf/prog_tests/btf.c +++ b/tools/testing/selftests/bpf/prog_tests/btf.c @@ -34,7 +34,6 @@ static bool always_log;  #undef CHECK  #define CHECK(condition, format...) _CHECK(condition, "check", duration, format) -#define BTF_END_RAW 0xdeadbeef  #define NAME_TBD 0xdeadb33f  #define NAME_NTH(N) (0xfffe0000 | N) |