BPF List
 help / color / mirror / Atom feed
* [PATCH bpf-next v2 0/4] selftests/bpf: Fix a few test failures with arm64 64KB page
@ 2025-06-06 17:41 Yonghong Song
  2025-06-06 17:41 ` [PATCH bpf-next v2 1/4] selftests/bpf: Reduce test_xdp_adjust_frags_tail_grow logs Yonghong Song
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Yonghong Song @ 2025-06-06 17:41 UTC (permalink / raw)
  To: bpf
  Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, kernel-team,
	Martin KaFai Lau

My local arm64 host has 64KB page size and the VM to run test_progs
also has 64KB page size. There are a few self tests assuming 4KB page
and failed in my environment.

Patch 1 reduced long assert logs so if the test fails, developers
can check logs easily. Patches 2-4 fixed three selftest failures.

Changelogs:
  v1 -> v2:
    - v1: https://lore.kernel.org/bpf/20250606032309.444401-1-yonghong.song@linux.dev/
    - Fix a problem with selftest release build, basically from
      BUILD_BUG_ON to ASSERT_LT.

Yonghong Song (4):
  selftests/bpf: Reduce test_xdp_adjust_frags_tail_grow logs
  selftests/bpf: Fix bpf_mod_race test failure with arm64 64KB page size
  selftests/bpf: Fix ringbuf/ringbuf_write test failure with arm64 64KB
    page size
  selftests/bpf: Fix a user_ringbuf failure with arm64 64KB page size

 .../selftests/bpf/prog_tests/bpf_mod_race.c    |  2 +-
 .../testing/selftests/bpf/prog_tests/ringbuf.c |  5 +++--
 .../selftests/bpf/prog_tests/user_ringbuf.c    | 10 +++++++---
 .../selftests/bpf/prog_tests/xdp_adjust_tail.c | 18 ++++++++++++------
 .../selftests/bpf/progs/test_ringbuf_write.c   |  5 +++--
 5 files changed, 26 insertions(+), 14 deletions(-)

-- 
2.47.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH bpf-next v2 1/4] selftests/bpf: Reduce test_xdp_adjust_frags_tail_grow logs
  2025-06-06 17:41 [PATCH bpf-next v2 0/4] selftests/bpf: Fix a few test failures with arm64 64KB page Yonghong Song
@ 2025-06-06 17:41 ` Yonghong Song
  2025-06-06 17:41 ` [PATCH bpf-next v2 2/4] selftests/bpf: Fix bpf_mod_race test failure with arm64 64KB page size Yonghong Song
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Yonghong Song @ 2025-06-06 17:41 UTC (permalink / raw)
  To: bpf
  Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, kernel-team,
	Martin KaFai Lau

For selftest xdp_adjust_tail/xdp_adjust_frags_tail_grow, if tested failure,
I see a long list of log output like

    ...
    test_xdp_adjust_frags_tail_grow:PASS:9Kb+10b-untouched 0 nsec
    test_xdp_adjust_frags_tail_grow:PASS:9Kb+10b-untouched 0 nsec
    test_xdp_adjust_frags_tail_grow:PASS:9Kb+10b-untouched 0 nsec
    test_xdp_adjust_frags_tail_grow:PASS:9Kb+10b-untouched 0 nsec
    ...

There are total 7374 lines of the above which is too much. Let us
only issue such logs when it is an assert failure.

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
---
 .../selftests/bpf/prog_tests/xdp_adjust_tail.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/xdp_adjust_tail.c b/tools/testing/selftests/bpf/prog_tests/xdp_adjust_tail.c
index b2b2d85dbb1b..e361129402a1 100644
--- a/tools/testing/selftests/bpf/prog_tests/xdp_adjust_tail.c
+++ b/tools/testing/selftests/bpf/prog_tests/xdp_adjust_tail.c
@@ -246,14 +246,20 @@ static void test_xdp_adjust_frags_tail_grow(void)
 	ASSERT_EQ(topts.retval, XDP_TX, "9Kb+10b retval");
 	ASSERT_EQ(topts.data_size_out, exp_size, "9Kb+10b size");
 
-	for (i = 0; i < 9000; i++)
-		ASSERT_EQ(buf[i], 1, "9Kb+10b-old");
+	for (i = 0; i < 9000; i++) {
+		if (buf[i] != 1)
+			ASSERT_EQ(buf[i], 1, "9Kb+10b-old");
+	}
 
-	for (i = 9000; i < 9010; i++)
-		ASSERT_EQ(buf[i], 0, "9Kb+10b-new");
+	for (i = 9000; i < 9010; i++) {
+		if (buf[i] != 0)
+			ASSERT_EQ(buf[i], 0, "9Kb+10b-new");
+	}
 
-	for (i = 9010; i < 16384; i++)
-		ASSERT_EQ(buf[i], 1, "9Kb+10b-untouched");
+	for (i = 9010; i < 16384; i++) {
+		if (buf[i] != 1)
+			ASSERT_EQ(buf[i], 1, "9Kb+10b-untouched");
+	}
 
 	/* Test a too large grow */
 	memset(buf, 1, 16384);
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH bpf-next v2 2/4] selftests/bpf: Fix bpf_mod_race test failure with arm64 64KB page size
  2025-06-06 17:41 [PATCH bpf-next v2 0/4] selftests/bpf: Fix a few test failures with arm64 64KB page Yonghong Song
  2025-06-06 17:41 ` [PATCH bpf-next v2 1/4] selftests/bpf: Reduce test_xdp_adjust_frags_tail_grow logs Yonghong Song
@ 2025-06-06 17:41 ` Yonghong Song
  2025-06-06 17:41 ` [PATCH bpf-next v2 3/4] selftests/bpf: Fix ringbuf/ringbuf_write " Yonghong Song
  2025-06-06 17:42 ` [PATCH bpf-next v2 4/4] selftests/bpf: Fix a user_ringbuf " Yonghong Song
  3 siblings, 0 replies; 7+ messages in thread
From: Yonghong Song @ 2025-06-06 17:41 UTC (permalink / raw)
  To: bpf
  Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, kernel-team,
	Martin KaFai Lau

Currently, uffd_register.range.len is set to 4096 for command
'ioctl(uffd, UFFDIO_REGISTER, &uffd_register)'. For arm64 64KB page size,
the len must be 64KB size aligned as page size alignment is required.
See fs/userfaultfd.c:validate_unaligned_range().

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
---
 tools/testing/selftests/bpf/prog_tests/bpf_mod_race.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_mod_race.c b/tools/testing/selftests/bpf/prog_tests/bpf_mod_race.c
index fe2c502e5089..ecc3d47919ad 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_mod_race.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_mod_race.c
@@ -78,7 +78,7 @@ static int test_setup_uffd(void *fault_addr)
 	}
 
 	uffd_register.range.start = (unsigned long)fault_addr;
-	uffd_register.range.len = 4096;
+	uffd_register.range.len = getpagesize();
 	uffd_register.mode = UFFDIO_REGISTER_MODE_MISSING;
 	if (ioctl(uffd, UFFDIO_REGISTER, &uffd_register)) {
 		close(uffd);
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH bpf-next v2 3/4] selftests/bpf: Fix ringbuf/ringbuf_write test failure with arm64 64KB page size
  2025-06-06 17:41 [PATCH bpf-next v2 0/4] selftests/bpf: Fix a few test failures with arm64 64KB page Yonghong Song
  2025-06-06 17:41 ` [PATCH bpf-next v2 1/4] selftests/bpf: Reduce test_xdp_adjust_frags_tail_grow logs Yonghong Song
  2025-06-06 17:41 ` [PATCH bpf-next v2 2/4] selftests/bpf: Fix bpf_mod_race test failure with arm64 64KB page size Yonghong Song
@ 2025-06-06 17:41 ` Yonghong Song
  2025-06-06 20:53   ` Alexei Starovoitov
  2025-06-06 17:42 ` [PATCH bpf-next v2 4/4] selftests/bpf: Fix a user_ringbuf " Yonghong Song
  3 siblings, 1 reply; 7+ messages in thread
From: Yonghong Song @ 2025-06-06 17:41 UTC (permalink / raw)
  To: bpf
  Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, kernel-team,
	Martin KaFai Lau

The ringbuf max_entries must be PAGE_ALIGNED. See kernel function
ringbuf_map_alloc(). So for arm64 64KB page size, adjust max_entries
properly.

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
---
 tools/testing/selftests/bpf/prog_tests/ringbuf.c       | 5 +++--
 tools/testing/selftests/bpf/progs/test_ringbuf_write.c | 5 +++--
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/ringbuf.c b/tools/testing/selftests/bpf/prog_tests/ringbuf.c
index da430df45aa4..89fd3401a23e 100644
--- a/tools/testing/selftests/bpf/prog_tests/ringbuf.c
+++ b/tools/testing/selftests/bpf/prog_tests/ringbuf.c
@@ -97,7 +97,8 @@ static void ringbuf_write_subtest(void)
 	if (!ASSERT_OK_PTR(skel, "skel_open"))
 		return;
 
-	skel->maps.ringbuf.max_entries = 0x4000;
+	skel->maps.ringbuf.max_entries = 4 * page_size;
+	skel->rodata->reserve_size = 3 * page_size;
 
 	err = test_ringbuf_write_lskel__load(skel);
 	if (!ASSERT_OK(err, "skel_load"))
@@ -108,7 +109,7 @@ static void ringbuf_write_subtest(void)
 	mmap_ptr = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, rb_fd, 0);
 	if (!ASSERT_OK_PTR(mmap_ptr, "rw_cons_pos"))
 		goto cleanup;
-	*mmap_ptr = 0x3000;
+	*mmap_ptr = 3 * page_size;
 	ASSERT_OK(munmap(mmap_ptr, page_size), "unmap_rw");
 
 	skel->bss->pid = getpid();
diff --git a/tools/testing/selftests/bpf/progs/test_ringbuf_write.c b/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
index 350513c0e4c9..9acef7afbe8a 100644
--- a/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
+++ b/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
@@ -12,6 +12,7 @@ struct {
 
 /* inputs */
 int pid = 0;
+const volatile int reserve_size = 0;
 
 /* outputs */
 long passed = 0;
@@ -26,11 +27,11 @@ int test_ringbuf_write(void *ctx)
 	if (cur_pid != pid)
 		return 0;
 
-	sample1 = bpf_ringbuf_reserve(&ringbuf, 0x3000, 0);
+	sample1 = bpf_ringbuf_reserve(&ringbuf, reserve_size, 0);
 	if (!sample1)
 		return 0;
 	/* first one can pass */
-	sample2 = bpf_ringbuf_reserve(&ringbuf, 0x3000, 0);
+	sample2 = bpf_ringbuf_reserve(&ringbuf, reserve_size, 0);
 	if (!sample2) {
 		bpf_ringbuf_discard(sample1, 0);
 		__sync_fetch_and_add(&discarded, 1);
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH bpf-next v2 4/4] selftests/bpf: Fix a user_ringbuf failure with arm64 64KB page size
  2025-06-06 17:41 [PATCH bpf-next v2 0/4] selftests/bpf: Fix a few test failures with arm64 64KB page Yonghong Song
                   ` (2 preceding siblings ...)
  2025-06-06 17:41 ` [PATCH bpf-next v2 3/4] selftests/bpf: Fix ringbuf/ringbuf_write " Yonghong Song
@ 2025-06-06 17:42 ` Yonghong Song
  3 siblings, 0 replies; 7+ messages in thread
From: Yonghong Song @ 2025-06-06 17:42 UTC (permalink / raw)
  To: bpf
  Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, kernel-team,
	Martin KaFai Lau

The ringbuf max_entries must be PAGE_ALIGNED. See kernel function
ringbuf_map_alloc(). So for arm64 64KB page size, adjust max_entries
properly.

Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
---
 tools/testing/selftests/bpf/prog_tests/user_ringbuf.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/user_ringbuf.c b/tools/testing/selftests/bpf/prog_tests/user_ringbuf.c
index d424e7ecbd12..9fd3ae987321 100644
--- a/tools/testing/selftests/bpf/prog_tests/user_ringbuf.c
+++ b/tools/testing/selftests/bpf/prog_tests/user_ringbuf.c
@@ -21,8 +21,7 @@
 #include "../progs/test_user_ringbuf.h"
 
 static const long c_sample_size = sizeof(struct sample) + BPF_RINGBUF_HDR_SZ;
-static const long c_ringbuf_size = 1 << 12; /* 1 small page */
-static const long c_max_entries = c_ringbuf_size / c_sample_size;
+static long c_ringbuf_size, c_max_entries;
 
 static void drain_current_samples(void)
 {
@@ -424,7 +423,9 @@ static void test_user_ringbuf_loop(void)
 	uint32_t remaining_samples = total_samples;
 	int err;
 
-	BUILD_BUG_ON(total_samples <= c_max_entries);
+	if (!ASSERT_LT(c_max_entries, total_samples, "compare_c_max_entries"))
+		return;
+
 	err = load_skel_create_user_ringbuf(&skel, &ringbuf);
 	if (err)
 		return;
@@ -686,6 +687,9 @@ void test_user_ringbuf(void)
 {
 	int i;
 
+	c_ringbuf_size = getpagesize(); /* 1 page */
+	c_max_entries = c_ringbuf_size / c_sample_size;
+
 	for (i = 0; i < ARRAY_SIZE(success_tests); i++) {
 		if (!test__start_subtest(success_tests[i].test_name))
 			continue;
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH bpf-next v2 3/4] selftests/bpf: Fix ringbuf/ringbuf_write test failure with arm64 64KB page size
  2025-06-06 17:41 ` [PATCH bpf-next v2 3/4] selftests/bpf: Fix ringbuf/ringbuf_write " Yonghong Song
@ 2025-06-06 20:53   ` Alexei Starovoitov
  2025-06-06 21:23     ` Yonghong Song
  0 siblings, 1 reply; 7+ messages in thread
From: Alexei Starovoitov @ 2025-06-06 20:53 UTC (permalink / raw)
  To: Yonghong Song
  Cc: bpf, Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann,
	Kernel Team, Martin KaFai Lau

On Fri, Jun 6, 2025 at 10:42 AM Yonghong Song <yonghong.song@linux.dev> wrote:
>
> The ringbuf max_entries must be PAGE_ALIGNED. See kernel function
> ringbuf_map_alloc(). So for arm64 64KB page size, adjust max_entries
> properly.
>
> Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
> ---
>  tools/testing/selftests/bpf/prog_tests/ringbuf.c       | 5 +++--
>  tools/testing/selftests/bpf/progs/test_ringbuf_write.c | 5 +++--
>  2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/ringbuf.c b/tools/testing/selftests/bpf/prog_tests/ringbuf.c
> index da430df45aa4..89fd3401a23e 100644
> --- a/tools/testing/selftests/bpf/prog_tests/ringbuf.c
> +++ b/tools/testing/selftests/bpf/prog_tests/ringbuf.c
> @@ -97,7 +97,8 @@ static void ringbuf_write_subtest(void)
>         if (!ASSERT_OK_PTR(skel, "skel_open"))
>                 return;
>
> -       skel->maps.ringbuf.max_entries = 0x4000;
> +       skel->maps.ringbuf.max_entries = 4 * page_size;
> +       skel->rodata->reserve_size = 3 * page_size;
>
>         err = test_ringbuf_write_lskel__load(skel);
>         if (!ASSERT_OK(err, "skel_load"))
> @@ -108,7 +109,7 @@ static void ringbuf_write_subtest(void)
>         mmap_ptr = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, rb_fd, 0);
>         if (!ASSERT_OK_PTR(mmap_ptr, "rw_cons_pos"))
>                 goto cleanup;
> -       *mmap_ptr = 0x3000;
> +       *mmap_ptr = 3 * page_size;
>         ASSERT_OK(munmap(mmap_ptr, page_size), "unmap_rw");
>
>         skel->bss->pid = getpid();
> diff --git a/tools/testing/selftests/bpf/progs/test_ringbuf_write.c b/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
> index 350513c0e4c9..9acef7afbe8a 100644
> --- a/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
> +++ b/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
> @@ -12,6 +12,7 @@ struct {
>
>  /* inputs */
>  int pid = 0;
> +const volatile int reserve_size = 0;

See CI failure:
|test_ringbuf_write.bpf.o|test_ringbuf_write|success -> failure (!!)|+0.00 % |

I think it's better to init reserve_size with some reasonable
constant to keep veristat happy.

pw-bot: cr

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH bpf-next v2 3/4] selftests/bpf: Fix ringbuf/ringbuf_write test failure with arm64 64KB page size
  2025-06-06 20:53   ` Alexei Starovoitov
@ 2025-06-06 21:23     ` Yonghong Song
  0 siblings, 0 replies; 7+ messages in thread
From: Yonghong Song @ 2025-06-06 21:23 UTC (permalink / raw)
  To: Alexei Starovoitov
  Cc: bpf, Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann,
	Kernel Team, Martin KaFai Lau


On 6/6/25 1:53 PM, Alexei Starovoitov wrote:
> On Fri, Jun 6, 2025 at 10:42 AM Yonghong Song <yonghong.song@linux.dev> wrote:
>> The ringbuf max_entries must be PAGE_ALIGNED. See kernel function
>> ringbuf_map_alloc(). So for arm64 64KB page size, adjust max_entries
>> properly.
>>
>> Signed-off-by: Yonghong Song <yonghong.song@linux.dev>
>> ---
>>   tools/testing/selftests/bpf/prog_tests/ringbuf.c       | 5 +++--
>>   tools/testing/selftests/bpf/progs/test_ringbuf_write.c | 5 +++--
>>   2 files changed, 6 insertions(+), 4 deletions(-)
>>
>> diff --git a/tools/testing/selftests/bpf/prog_tests/ringbuf.c b/tools/testing/selftests/bpf/prog_tests/ringbuf.c
>> index da430df45aa4..89fd3401a23e 100644
>> --- a/tools/testing/selftests/bpf/prog_tests/ringbuf.c
>> +++ b/tools/testing/selftests/bpf/prog_tests/ringbuf.c
>> @@ -97,7 +97,8 @@ static void ringbuf_write_subtest(void)
>>          if (!ASSERT_OK_PTR(skel, "skel_open"))
>>                  return;
>>
>> -       skel->maps.ringbuf.max_entries = 0x4000;
>> +       skel->maps.ringbuf.max_entries = 4 * page_size;
>> +       skel->rodata->reserve_size = 3 * page_size;
>>
>>          err = test_ringbuf_write_lskel__load(skel);
>>          if (!ASSERT_OK(err, "skel_load"))
>> @@ -108,7 +109,7 @@ static void ringbuf_write_subtest(void)
>>          mmap_ptr = mmap(NULL, page_size, PROT_READ | PROT_WRITE, MAP_SHARED, rb_fd, 0);
>>          if (!ASSERT_OK_PTR(mmap_ptr, "rw_cons_pos"))
>>                  goto cleanup;
>> -       *mmap_ptr = 0x3000;
>> +       *mmap_ptr = 3 * page_size;
>>          ASSERT_OK(munmap(mmap_ptr, page_size), "unmap_rw");
>>
>>          skel->bss->pid = getpid();
>> diff --git a/tools/testing/selftests/bpf/progs/test_ringbuf_write.c b/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
>> index 350513c0e4c9..9acef7afbe8a 100644
>> --- a/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
>> +++ b/tools/testing/selftests/bpf/progs/test_ringbuf_write.c
>> @@ -12,6 +12,7 @@ struct {
>>
>>   /* inputs */
>>   int pid = 0;
>> +const volatile int reserve_size = 0;
> See CI failure:
> |test_ringbuf_write.bpf.o|test_ringbuf_write|success -> failure (!!)|+0.00 % |
>
> I think it's better to init reserve_size with some reasonable
> constant to keep veristat happy.

Yes, I am aware of this and actually fixed locally already. Will send out v3 soon.

>
> pw-bot: cr


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-06-06 21:23 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-06 17:41 [PATCH bpf-next v2 0/4] selftests/bpf: Fix a few test failures with arm64 64KB page Yonghong Song
2025-06-06 17:41 ` [PATCH bpf-next v2 1/4] selftests/bpf: Reduce test_xdp_adjust_frags_tail_grow logs Yonghong Song
2025-06-06 17:41 ` [PATCH bpf-next v2 2/4] selftests/bpf: Fix bpf_mod_race test failure with arm64 64KB page size Yonghong Song
2025-06-06 17:41 ` [PATCH bpf-next v2 3/4] selftests/bpf: Fix ringbuf/ringbuf_write " Yonghong Song
2025-06-06 20:53   ` Alexei Starovoitov
2025-06-06 21:23     ` Yonghong Song
2025-06-06 17:42 ` [PATCH bpf-next v2 4/4] selftests/bpf: Fix a user_ringbuf " Yonghong Song

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox