Re: [PATCH bpf-next v3 8/8] selftests/bpf: skip the struct_ops arena tests without compiler support
From: Vineet Gupta
Date: Mon Nov 02 2026 - 19:17:49 EST
On 11/2/26 2:39 PM, Alexei Starovoitov wrote:
On Mon, Nov 02, 2026 at 02:07 PM Vineet Gupta <vineet.gupta@xxxxxxxxx> wrote:
These are not driven by test_loader, so __skip_without_arena does notcast_kern() is cleaner...
reach them. Use the flag-in-.data pattern linked_externs.c already
uses for the same situation: the program exports skip_tests, and the
host checks it before attaching and reports SKIP.
It's a nop when the compiler supports arena.
Nice, definitely better than what I had since now more code is exercised than being skipped.
Thx,
-Vineet
diff --git a/tools/testing/selftests/bpf/progs/struct_ops_arena.c b/tools/testing/selftests/bpf/progs/struct_ops_arena.c
index 8aa8639..3fffa24 100644
--- a/tools/testing/selftests/bpf/progs/struct_ops_arena.c
+++ b/tools/testing/selftests/bpf/progs/struct_ops_arena.c
@@ -86,7 +86,6 @@ struct bpf_testmod_ops3 testmod_arena = {
SEC("syscall")
int trigger(void *ctx)
{
-#if defined(__BPF_FEATURE_ADDR_SPACE_CAST)
u64 __arena *val;
int ret;
@@ -94,6 +93,7 @@ int trigger(void *ctx)
if (!val)
return 1;
+ cast_kern(val);
*val = 41;
ret = bpf_testmod_ops3_call_test_arena((u64 *)val);
if (ret)
@@ -134,6 +134,5 @@ int trigger(void *ctx)
return 11;
bpf_arena_free_pages(&arena, (void __arena *)val, 1);
-#endif
return 0;
}
diff --git a/tools/testing/selftests/bpf/progs/struct_ops_arena_autobind.c b/tools/testing/selftests/bpf/progs/struct_ops_arena_autobind.c
index 495faa0..3455ca9 100644
--- a/tools/testing/selftests/bpf/progs/struct_ops_arena_autobind.c
+++ b/tools/testing/selftests/bpf/progs/struct_ops_arena_autobind.c
@@ -45,13 +45,13 @@ int unrelated(void *ctx)
SEC("syscall")
int trigger(void *ctx)
{
-#if defined(__BPF_FEATURE_ADDR_SPACE_CAST)
u64 __arena *val;
val = bpf_arena_alloc_pages(&arena, NULL, 1, NUMA_NO_NODE, 0);
if (!val)
return 1;
+ cast_kern(val);
*val = 41;
if (bpf_testmod_ops3_call_test_arena((u64 *)val))
return 2;
@@ -59,6 +59,5 @@ int trigger(void *ctx)
return 3;
bpf_arena_free_pages(&arena, (void __arena *)val, 1);
-#endif
return 0;
}
diff --git a/tools/testing/selftests/bpf/progs/struct_ops_arena_member.c b/tools/testing/selftests/bpf/progs/struct_ops_arena_member.c
index a2218cd..afbe59f 100644
--- a/tools/testing/selftests/bpf/progs/struct_ops_arena_member.c
+++ b/tools/testing/selftests/bpf/progs/struct_ops_arena_member.c
@@ -80,7 +80,6 @@ struct bpf_testmod_ops3 testmod_arena_member = {
SEC("syscall")
int trigger(void *ctx)
{
-#if defined(__BPF_FEATURE_ADDR_SPACE_CAST)
u64 __arena *val;
int ret;
@@ -88,6 +87,7 @@ int trigger(void *ctx)
if (!val)
return 1;
+ cast_kern(val);
*val = 41;
ret = bpf_testmod_ops3_call_test_arena_member((u64 *)val);
if (ret)
@@ -104,6 +104,5 @@ int trigger(void *ctx)
return 4;
bpf_arena_free_pages(&arena, (void __arena *)val, 1);
-#endif
return 0;
}
diff --git a/tools/testing/selftests/bpf/progs/struct_ops_arena_member_render.c b/tools/testing/selftests/bpf/progs/struct_ops_arena_member_render.c
index 09b4c74..c4e134e 100644
--- a/tools/testing/selftests/bpf/progs/struct_ops_arena_member_render.c
+++ b/tools/testing/selftests/bpf/progs/struct_ops_arena_member_render.c
@@ -63,7 +63,6 @@ struct bpf_testmod_ops3 testmod_arena_member_render = {
SEC("syscall")
int trigger(void *ctx)
{
-#if defined(__BPF_FEATURE_ADDR_SPACE_CAST)
u64 __arena *val;
int ret;
@@ -71,6 +70,7 @@ int trigger(void *ctx)
if (!val)
return 1;
+ cast_kern(val);
*val = 41;
ret = bpf_testmod_ops3_call_test_arena_member((u64 *)val);
if (ret)
@@ -80,6 +80,5 @@ int trigger(void *ctx)
return 3;
bpf_arena_free_pages(&arena, (void __arena *)val, 1);
-#endif
return 0;
}