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

selftests/bpf: Fix xdp_do_redirect failure with 64KB page size

On arm64 with 64KB page size, the selftest xdp_do_redirect failed like
below:
...
test_xdp_do_redirect:PASS:pkt_count_tc 0 nsec
test_max_pkt_size:PASS:prog_run_max_size 0 nsec
test_max_pkt_size:FAIL:prog_run_too_big unexpected prog_run_too_big: actual -28 != expected -22

With 64KB page size, the xdp frame size will be much bigger so
the existing test will fail.

Adjust various parameters so the test can also work on 64K page size.

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20250612035042.2208630-1-yonghong.song@linux.dev
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Yonghong Song and committed by
Alexei Starovoitov
44df9e0d 96fcf7e7

+11 -2
+11 -2
tools/testing/selftests/bpf/prog_tests/xdp_do_redirect.c
··· 66 66 #else 67 67 #define MAX_PKT_SIZE 3408 68 68 #endif 69 + 70 + #define PAGE_SIZE_4K 4096 71 + #define PAGE_SIZE_64K 65536 72 + 69 73 static void test_max_pkt_size(int fd) 70 74 { 71 - char data[MAX_PKT_SIZE + 1] = {}; 75 + char data[PAGE_SIZE_64K + 1] = {}; 72 76 int err; 73 77 DECLARE_LIBBPF_OPTS(bpf_test_run_opts, opts, 74 78 .data_in = &data, 75 - .data_size_in = MAX_PKT_SIZE, 76 79 .flags = BPF_F_TEST_XDP_LIVE_FRAMES, 77 80 .repeat = 1, 78 81 ); 82 + 83 + if (getpagesize() == PAGE_SIZE_64K) 84 + opts.data_size_in = MAX_PKT_SIZE + PAGE_SIZE_64K - PAGE_SIZE_4K; 85 + else 86 + opts.data_size_in = MAX_PKT_SIZE; 87 + 79 88 err = bpf_prog_test_run_opts(fd, &opts); 80 89 ASSERT_OK(err, "prog_run_max_size"); 81 90