]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/bpf: Fix xdp_do_redirect failure with 64KB page size
authorYonghong Song <yonghong.song@linux.dev>
Thu, 12 Jun 2025 03:50:42 +0000 (20:50 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 13 Jun 2025 02:07:51 +0000 (19:07 -0700)
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>
tools/testing/selftests/bpf/prog_tests/xdp_do_redirect.c

index 7dac044664ace4bfb8bc9ff97288277bb8f08d3f..dd34b0cc4b4e4937002f0cb6c052f8674f7cc333 100644 (file)
@@ -66,16 +66,25 @@ static int attach_tc_prog(struct bpf_tc_hook *hook, int fd)
 #else
 #define MAX_PKT_SIZE 3408
 #endif
+
+#define PAGE_SIZE_4K  4096
+#define PAGE_SIZE_64K 65536
+
 static void test_max_pkt_size(int fd)
 {
-       char data[MAX_PKT_SIZE + 1] = {};
+       char data[PAGE_SIZE_64K + 1] = {};
        int err;
        DECLARE_LIBBPF_OPTS(bpf_test_run_opts, opts,
                            .data_in = &data,
-                           .data_size_in = MAX_PKT_SIZE,
                            .flags = BPF_F_TEST_XDP_LIVE_FRAMES,
                            .repeat = 1,
                );
+
+       if (getpagesize() == PAGE_SIZE_64K)
+               opts.data_size_in = MAX_PKT_SIZE + PAGE_SIZE_64K - PAGE_SIZE_4K;
+       else
+               opts.data_size_in = MAX_PKT_SIZE;
+
        err = bpf_prog_test_run_opts(fd, &opts);
        ASSERT_OK(err, "prog_run_max_size");