Re: [PATCH bpf-next 1/3] selftests/bpf: Increase xdp data size for arm64 64K page size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/25/25 05:34, Yonghong Song wrote:
With arm64 64K page size, the following 4 subtests failed:
   #97/25   dynptr/test_probe_read_user_dynptr:FAIL
   #97/26   dynptr/test_probe_read_kernel_dynptr:FAIL
   #97/27   dynptr/test_probe_read_user_str_dynptr:FAIL
   #97/28   dynptr/test_probe_read_kernel_str_dynptr:FAIL

These failures are due to function bpf_dynptr_check_off_len() in
include/linux/bpf.h where there is a test
   if (len > size || offset > size - len)
     return -E2BIG;
With 64K page size, the 'offset' is greater than 'size - len',
which caused the test failure.

For 64KB page size, this patch increased the xdp buffer size from 5000 to
90000. The above 4 test failures are fixed as 'size' value is increased.
But it introduced two new failures:
   #97/4    dynptr/test_dynptr_copy_xdp:FAIL
   #97/12   dynptr/test_dynptr_memset_xdp_chunks:FAIL

These two failures will be addressed in subsequent patches.

Signed-off-by: Yonghong Song <yonghong.song@xxxxxxxxx>
---
  tools/testing/selftests/bpf/prog_tests/dynptr.c | 10 ++++++++--
  1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/dynptr.c b/tools/testing/selftests/bpf/prog_tests/dynptr.c
index f2b65398afce..9b2d9ceda210 100644
--- a/tools/testing/selftests/bpf/prog_tests/dynptr.c
+++ b/tools/testing/selftests/bpf/prog_tests/dynptr.c
@@ -51,6 +51,8 @@ static struct {
  	{"test_copy_from_user_task_str_dynptr", SETUP_SYSCALL_SLEEP},
  };
+#define PAGE_SIZE_64K 65536
+
  static void verify_success(const char *prog_name, enum test_setup_type setup_type)
  {
  	char user_data[384] = {[0 ... 382] = 'a', '\0'};
@@ -146,14 +148,18 @@ static void verify_success(const char *prog_name, enum test_setup_type setup_typ
  	}
  	case SETUP_XDP_PROG:
  	{
-		char data[5000];
+		char data[90000];
  		int err, prog_fd;
  		LIBBPF_OPTS(bpf_test_run_opts, opts,
  			    .data_in = &data,
-			    .data_size_in = sizeof(data),
  			    .repeat = 1,
  		);
+ if (getpagesize() == PAGE_SIZE_64K)
+			opts.data_size_in = sizeof(data);
+		else
+			opts.data_size_in = 5000;
+
  		prog_fd = bpf_program__fd(prog);
  		err = bpf_prog_test_run_opts(prog_fd, &opts);
Thanks for fixing these tests for 64K page size.
Acked-by: Mykyta Yatsenko <yatsenko@xxxxxxxx>




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux