This reverts commit 3eefb2fbf4ec1c1ff239b8b65e6e78aae335e4a6. libbpf support for "tc" progs doesn't exist for the linux-5.15.y tree. This commit was backported too far back in upstream, to a kernel where the libbpf support was not there for the test. Signed-off-by: Samasth Norway Ananda <samasth.norway.ananda@xxxxxxxxxx> Conflicts: tools/testing/selftests/bpf/prog_tests/tailcalls.c conflict was caused due to code overlap with the commit b06bde1c5ed6 ("selftests/bpf: Correct map_fd to data_fd in tailcalls") in the function test_tailcall_bpf2bpf_6(). As this function is removed by the revert conflict is resolved. --- This was identified when we ran bpf selftest. $ cd tools/testing/selftests/bpf $ make test_progs $ ./test_progs --name=ksyms_module #137/1 tailcalls/tailcall_1:OK #137/2 tailcalls/tailcall_2:OK #137/3 tailcalls/tailcall_3:OK #137/4 tailcalls/tailcall_4:OK #137/5 tailcalls/tailcall_5:OK #137/6 tailcalls/tailcall_bpf2bpf_1:OK #137/7 tailcalls/tailcall_bpf2bpf_2:OK #137/8 tailcalls/tailcall_bpf2bpf_3:OK #137/9 tailcalls/tailcall_bpf2bpf_4:OK #137/10 tailcalls/tailcall_bpf2bpf_5:OK libbpf: prog 'classifier_0': missing BPF prog type, check ELF section name 'tc' libbpf: failed to load program 'classifier_0' libbpf: failed to load object 'tailcall_bpf2bpf6' libbpf: failed to load BPF skeleton 'tailcall_bpf2bpf6': -22 test_tailcall_bpf2bpf_6:FAIL:open and load unexpected error: -22 #137/11 tailcalls/tailcall_bpf2bpf_6:FAIL #137 tailcalls:FAIL Summary: 0/10 PASSED, 0 SKIPPED, 2 FAILED --- .../selftests/bpf/prog_tests/tailcalls.c | 55 ------------------- .../selftests/bpf/progs/tailcall_bpf2bpf6.c | 42 -------------- 2 files changed, 97 deletions(-) delete mode 100644 tools/testing/selftests/bpf/progs/tailcall_bpf2bpf6.c diff --git a/tools/testing/selftests/bpf/prog_tests/tailcalls.c b/tools/testing/selftests/bpf/prog_tests/tailcalls.c index 28e30ad4a30e..2e3e525e8579 100644 --- a/tools/testing/selftests/bpf/prog_tests/tailcalls.c +++ b/tools/testing/selftests/bpf/prog_tests/tailcalls.c @@ -810,59 +810,6 @@ static void test_tailcall_bpf2bpf_4(bool noise) bpf_object__close(obj); } -#include "tailcall_bpf2bpf6.skel.h" - -/* Tail call counting works even when there is data on stack which is - * not aligned to 8 bytes. - */ -static void test_tailcall_bpf2bpf_6(void) -{ - struct tailcall_bpf2bpf6 *obj; - int err, map_fd, prog_fd, main_fd, data_fd, i, val; - LIBBPF_OPTS(bpf_test_run_opts, topts, - .data_in = &pkt_v4, - .data_size_in = sizeof(pkt_v4), - .repeat = 1, - ); - - obj = tailcall_bpf2bpf6__open_and_load(); - if (!ASSERT_OK_PTR(obj, "open and load")) - return; - - main_fd = bpf_program__fd(obj->progs.entry); - if (!ASSERT_GE(main_fd, 0, "entry prog fd")) - goto out; - - map_fd = bpf_map__fd(obj->maps.jmp_table); - if (!ASSERT_GE(map_fd, 0, "jmp_table map fd")) - goto out; - - prog_fd = bpf_program__fd(obj->progs.classifier_0); - if (!ASSERT_GE(prog_fd, 0, "classifier_0 prog fd")) - goto out; - - i = 0; - err = bpf_map_update_elem(map_fd, &i, &prog_fd, BPF_ANY); - if (!ASSERT_OK(err, "jmp_table map update")) - goto out; - - err = bpf_prog_test_run_opts(main_fd, &topts); - ASSERT_OK(err, "entry prog test run"); - ASSERT_EQ(topts.retval, 0, "tailcall retval"); - - data_fd = bpf_map__fd(obj->maps.bss); - if (!ASSERT_GE(data_fd, 0, "bss map fd")) - goto out; - - i = 0; - err = bpf_map_lookup_elem(data_fd, &i, &val); - ASSERT_OK(err, "bss map lookup"); - ASSERT_EQ(val, 1, "done flag is set"); - -out: - tailcall_bpf2bpf6__destroy(obj); -} - void test_tailcalls(void) { if (test__start_subtest("tailcall_1")) @@ -885,6 +832,4 @@ void test_tailcalls(void) test_tailcall_bpf2bpf_4(false); if (test__start_subtest("tailcall_bpf2bpf_5")) test_tailcall_bpf2bpf_4(true); - if (test__start_subtest("tailcall_bpf2bpf_6")) - test_tailcall_bpf2bpf_6(); } diff --git a/tools/testing/selftests/bpf/progs/tailcall_bpf2bpf6.c b/tools/testing/selftests/bpf/progs/tailcall_bpf2bpf6.c deleted file mode 100644 index 41ce83da78e8..000000000000 --- a/tools/testing/selftests/bpf/progs/tailcall_bpf2bpf6.c +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -#include <linux/bpf.h> -#include <bpf/bpf_helpers.h> - -#define __unused __attribute__((unused)) - -struct { - __uint(type, BPF_MAP_TYPE_PROG_ARRAY); - __uint(max_entries, 1); - __uint(key_size, sizeof(__u32)); - __uint(value_size, sizeof(__u32)); -} jmp_table SEC(".maps"); - -int done = 0; - -SEC("tc") -int classifier_0(struct __sk_buff *skb __unused) -{ - done = 1; - return 0; -} - -static __noinline -int subprog_tail(struct __sk_buff *skb) -{ - /* Don't propagate the constant to the caller */ - volatile int ret = 1; - - bpf_tail_call_static(skb, &jmp_table, 0); - return ret; -} - -SEC("tc") -int entry(struct __sk_buff *skb) -{ - /* Have data on stack which size is not a multiple of 8 */ - volatile char arr[1] = {}; - - return subprog_tail(skb); -} - -char __license[] SEC("license") = "GPL"; -- 2.42.0