From: Vineet Gupta <vineet.gupta@linux.dev>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
eddyz87@gmail.com, memxor@gmail.com, martin.lau@linux.dev,
song@kernel.org, yonghong.song@linux.dev, jolsa@kernel.org,
emil@etsalapatis.com, ihor.solodrai@linux.dev,
john.fastabend@gmail.com, shuah@kernel.org,
linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
jose.marchesi@oracle.com, david.faust@oss.qualcomm.com,
Vineet Gupta <vineet.gupta@linux.dev>
Subject: [PATCH bpf-next v4 0/8] selftests/bpf: let the arena tests build with GCC
Date: Tue, 3 Nov 2026 10:18:08 -0800 [thread overview]
Message-ID: <20261103181816.254686-1-vineet.gupta@linux.dev> (raw)
The arena selftests cannot be built by GCC today. Three separate
build failures stand in the way, and they are all hidden rather than
avoided by the __BPF_FEATURE_ADDR_SPACE_CAST guards wrapped around
those tests -- the moment a GCC defines that macro, which is what the
in-progress arena support does, the guards stop hiding them and the
build breaks.
Behind the same guards the reporting is also not true. Tests inside a
whole-file guard do not appear at all, so the report is silent about
them. Tests with a guard inside the function keep an empty body that
satisfies __success __retval(0) by doing nothing, and report OK.
So: fix the build failures, then drop the guards entirely and tag the
few tests that genuinely need the feature, which removes the
empty-body failure mode rather than reporting around it.
Numbers are test_progs on bpf-next with a stock bpf-gcc, before and
after:
1/8: Gate the callx tests on CAN_USE_CALLX, which also accepts a GCC
defining __BPF_FEATURE_CALLX.
-> 79 newly visible, 78 OK and one @unpriv SKIP.
2/8: Keep clang-only warning flags out of GCC builds.
3/8: Make arena_base() opaque to GCC's -Warray-bounds, as stream.c
already did for its own copy, and fold that copy back in.
-> no verdict change.
4/8: Spell the addr_space_cast address spaces in decimal. gas only
took hex after 2.47, and the failure is in the assembler.
-> no functional change.
5/8: Write the mixed arena/scalar ALU tests in asm, rather than a
volatile register variable GCC may optimise away.
-> both now run under a stock bpf-gcc.
6/8: Drop the arena guards and tag the tests that need the feature.
-> 27 newly visible, 22 running and passing; four need the tag.
7/8: Cast explicitly in the four struct_ops arena triggers, which
test_loader does not drive so the tag cannot reach them.
-> 2 tests stop reporting a vacuous OK and run for real.
8/8: Cast explicitly with bpf_addr_space_cast() in the arena subprog
and callback faults, as the sibling tests already do.
-> 15 FAIL -> OK, 5 newly visible.
Totals for the series:
FAIL 472 -> 456 OK -> FAIL regressions: 0
OK 7061 -> 7167
SKIP 753 -> 772
v3 -> v4:
Alexei suggested simpler mechanisms for three patches. That exposed
build failures that had to be fixed first, so the series is renumbered.
- v3 3/8: the #else dummies are gone. Rather than give each guard a
placeholder that reports SKIP, drop the guards and tag the tests
that need the feature (Alexei)
- v3 4/8: arena_base() folds barrier_var() (Alexei)
- v3 8/8: cast_kern() instead of the flag in .data. (Alexei)
- New 4/8: addr_space_cast address spaces in decimal. gas has bug
which is fixed but not released yet
- 5/8: the asm rewrite of the mixed ALU tests moves ahead of the
guard removal -- with the guards gone GCC sees the volatile
register variables and -Werror=volatile-register-var fires. Both
tests now run under a stock bpf-gcc.
- verifier_hmul_arena.c converted away from dummy skip for consistency.
v2 -> v3:
- Rebased on bpf-next.
- 1/8: the bot asked about data_in_arena.c, whose use_ops() gated an
indirect call on __clang__ with no arch condition. That file has
since gone in 3c13b2e5a40e ("selftests/bpf: Remove tests for global
data in arena"), so nothing is left to convert. The missing word in
the commit message is fixed. (bot)
- 7/8: the comment on the r9 load said it was what makes libbpf record
the arena, which stopped being true with cd7a395838cb ("libbpf: Bind
the arena of an object to every program in it"). The load is now
only a fallback for a kernel without fd_array_cnt and for the light
skeleton; say that instead. (bot)
v1 -> v2:
- 1/8: the __skip() reason named only x86/arm64 while CAN_USE_CALLX
also accepts riscv64. Say "arch JIT" instead of listing them, so
the string cannot go stale the next time an arch is added. (bot)
- 3/8: jit_insns_arena.c was missed. Both of its programs are inside
the guard, so without arena support the object has none at all and
RUN_TESTS(jit_insns_arena) ran zero subtests without saying so.
(bot)
- 5/8: commit message only. It cited arena_types to argue the kfunc
tests need no cast, but the address parameters carry the __ign
suffix, so get_kfunc_arg_type() returns ARG_IGNORE and
check_func_arg() returns before any register type check.
Conclusion unchanged, for a better reason. (bot)
- 5/8: arena_kfunc.c, verifier_arena_globals1.c and
verifier_arena_globals2.c had the same empty-body shape and were
missed; nine more guards go and seven more tags arrive.
arena_kfunc.c alone had eight subtests reporting a vacuous OK.
- 8/8: new patch, for the four struct_ops arena progs.
The three bot findings prompted a sweep of every prog with an
arena guard, which is where the last two came from.
Link: https://lore.kernel.org/bpf/20261028000411.4010967-1-vineet.gupta@linux.dev/ [v1]
Link: https://lore.kernel.org/bpf/20261028204158.1021284-1-vineet.gupta@linux.dev/ [v2]
Link: https://lore.kernel.org/bpf/20261102220717.4079739-1-vineet.gupta@linux.dev/ [v3]
Vineet Gupta (8):
selftests/bpf: Build callx tests with GCC that defines
__BPF_FEATURE_CALLX
selftests/bpf: don't pass clang-only warning flags to GCC
selftests/bpf: make arena_base() opaque to GCC's -Warray-bounds
selftests/bpf: spell the addr_space_cast address spaces in decimal
selftests/bpf: write the mixed arena/scalar ALU tests in asm
selftests/bpf: drop the arena guards and tag the tests that need arena
selftests/bpf: cast explicitly in the struct_ops arena triggers
selftests/bpf: cast explicitly in the arena subprog and callback
faults
tools/testing/selftests/bpf/Makefile | 8 +-
.../testing/selftests/bpf/Makefile.buildvars | 6 +-
.../bpf/libarena/include/bpf_arena_common.h | 11 +-
.../bpf/prog_tests/callx_rodata_lskel.c | 2 +-
.../selftests/bpf/progs/arena_atomics.c | 32 ++--
.../testing/selftests/bpf/progs/arena_kfunc.c | 18 +--
.../selftests/bpf/progs/arena_kfunc_jit.c | 5 +-
tools/testing/selftests/bpf/progs/bpf_misc.h | 16 ++
.../selftests/bpf/progs/callx_rodata.c | 4 +-
.../bpf/progs/compute_live_registers.c | 2 -
.../selftests/bpf/progs/jit_insns_arena.c | 10 +-
tools/testing/selftests/bpf/progs/stream.c | 62 ++------
.../selftests/bpf/progs/struct_ops_arena.c | 3 +-
.../bpf/progs/struct_ops_arena_autobind.c | 3 +-
.../bpf/progs/struct_ops_arena_member.c | 3 +-
.../progs/struct_ops_arena_member_render.c | 3 +-
.../selftests/bpf/progs/verifier_arena.c | 138 ++++++++----------
.../bpf/progs/verifier_arena_globals1.c | 6 +-
.../bpf/progs/verifier_arena_globals2.c | 3 +-
.../bpf/progs/verifier_arena_large.c | 21 +--
.../selftests/bpf/progs/verifier_callx.c | 5 +-
.../bpf/progs/verifier_callx_rodata.c | 5 +-
.../selftests/bpf/progs/verifier_hmul_arena.c | 19 +--
.../selftests/bpf/progs/verifier_ldsx.c | 14 +-
.../selftests/bpf/progs/verifier_zext.c | 4 -
25 files changed, 159 insertions(+), 244 deletions(-)
--
2.53.0-Meta
next reply other threads:[~2026-11-03 18:18 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 18:18 Vineet Gupta [this message]
2026-11-03 18:18 ` [PATCH bpf-next v4 1/8] selftests/bpf: Build callx tests with GCC that defines __BPF_FEATURE_CALLX Vineet Gupta
2026-11-03 18:18 ` [PATCH bpf-next v4 2/8] selftests/bpf: don't pass clang-only warning flags to GCC Vineet Gupta
2026-11-03 18:18 ` [PATCH bpf-next v4 3/8] selftests/bpf: make arena_base() opaque to GCC's -Warray-bounds Vineet Gupta
2026-11-03 18:18 ` [PATCH bpf-next v4 4/8] selftests/bpf: spell the addr_space_cast address spaces in decimal Vineet Gupta
2026-11-03 18:57 ` bot+bpf-ci
2026-11-03 18:18 ` [PATCH bpf-next v4 5/8] selftests/bpf: write the mixed arena/scalar ALU tests in asm Vineet Gupta
2026-11-03 18:57 ` bot+bpf-ci
2026-11-03 18:18 ` [PATCH bpf-next v4 6/8] selftests/bpf: drop the arena guards and tag the tests that need arena Vineet Gupta
2026-11-03 18:57 ` bot+bpf-ci
2026-11-03 18:18 ` [PATCH bpf-next v4 7/8] selftests/bpf: cast explicitly in the struct_ops arena triggers Vineet Gupta
2026-11-03 18:18 ` [PATCH bpf-next v4 8/8] selftests/bpf: cast explicitly in the arena subprog and callback faults Vineet Gupta
2026-11-03 21:20 ` [PATCH bpf-next v4 0/8] selftests/bpf: let the arena tests build with GCC patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261103181816.254686-1-vineet.gupta@linux.dev \
--to=vineet.gupta@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=david.faust@oss.qualcomm.com \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=ihor.solodrai@linux.dev \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=jose.marchesi@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.