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 v2 0/8] selftests/bpf: cleanup bpf-gcc runs
Date: Wed, 28 Oct 2026 13:41:50 -0700 [thread overview]
Message-ID: <20261028204158.1021284-1-vineet.gupta@linux.dev> (raw)
This series came out of testing a still in-works __arena support for
BPF_GCC and anomalies seen in the A/B reports.
BPF_GCC selftest builds reports a number of things that are not true.
- Tests the compiler cannot build do not appear at all, so the
report is silent about them
- Others are compiled down to an empty body and report OK despite
not even been executed
- Two programs that fail to verify take four unrelated tests down with
them, because everything in that object is loaded together.
- Unconditional gating on __clang__ when newer GCC support for those
is coming online.
Only 7/8 needs the in-works arena support to be exercised at all; the
rest are measured below with a stock bpf-gcc. Nothing in the series
changes what clang emits.
What each patch does, and what it measurably changes. Numbers are
test_progs on bpf-next with a stock bpf-gcc:
1/8: Gate the callx tests on CAN_USE_CALLX, which also accepts a GCC
defining __BPF_FEATURE_CALLX.
-> 76 subtests newly visible, 75 OK and one @unpriv SKIP; the two
dummies retire; callx_rodata_lskel SKIP -> OK.
2/8: Keep clang-only warning flags out of GCC builds.
3/8: Add __skip_without_arena, and give each arena guard an #else
dummy carrying it.
-> 7 subtests newly visible, all SKIP; arena_kfunc_jit OK -> SKIP.
4/8: Make arena_base() opaque to GCC's -Warray-bounds, behind
#ifdef __clang__ since clang does not warn.
-> no verdict change. +35 insns over 20 call sites under GCC;
clang output unchanged, bit for bit.
5/8: Tag the tests whose body dereferences an arena pointer, and only
those; drop the in-body guards.
-> 13 subtests OK -> SKIP, check_arena_arg_ret FAIL -> SKIP, and
verifier_arena itself FAIL -> OK. The rest now actually run.
6/8: Cast explicitly with bpf_addr_space_cast() in the arena subprog
and callback faults, as the sibling tests already do.
-> 15 FAIL -> OK, and 5 subtests newly visible.
7/8: Write the mixed arena/scalar ALU tests in asm, rather than a
volatile register variable GCC may optimise away.
-> not exercised by a stock bpf-gcc.
8/8: trigger() in the four struct_ops arena progs is guarded in-body
and test_loader does not drive them, so the tag cannot reach
them; use the flag-in-.data pattern from linked_externs.c.
-> 2 tests stop reporting a vacuous OK. The other two need a
testmod BTF carrying the arena tag, so are unreached here.
Totals for the series. Nothing regresses:
FAIL 473 -> 456 OK -> FAIL regressions: 0
OK 7027 -> 7104
SKIP 761 -> 787
Two things worth re-iterating explicitly:
- 1/8 needs a GCC defining __BPF_FEATURE_CALLX, in bleeding-edge
but not released yet.
- 7/8, needs a GCC with arena support; that work is coming along
but not yet ready for public review.
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. The totals above were
re-measured on the series as posted.
Link: https://lore.kernel.org/bpf/20261028000411.4010967-1-vineet.gupta@linux.dev/
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: report SKIP for arena tests a compiler cannot build
selftests/bpf: make arena_base() opaque to GCC's -Warray-bounds
selftests/bpf: don't report arena tests as passing with an empty body
selftests/bpf: cast explicitly in the arena subprog and callback
faults
selftests/bpf: write the mixed arena/scalar ALU tests in asm
selftests/bpf: skip the struct_ops arena tests without compiler
support
tools/testing/selftests/bpf/Makefile | 8 +-
.../testing/selftests/bpf/Makefile.buildvars | 6 +-
.../bpf/libarena/include/bpf_arena_common.h | 16 +++
.../bpf/prog_tests/callx_rodata_lskel.c | 2 +-
.../bpf/prog_tests/test_struct_ops_arena.c | 27 ++++
.../testing/selftests/bpf/progs/arena_kfunc.c | 18 +--
.../selftests/bpf/progs/arena_kfunc_jit.c | 9 ++
tools/testing/selftests/bpf/progs/bpf_misc.h | 21 +++
.../selftests/bpf/progs/callx_rodata.c | 4 +-
.../bpf/progs/compute_live_registers.c | 10 ++
.../selftests/bpf/progs/jit_insns_arena.c | 10 ++
tools/testing/selftests/bpf/progs/stream.c | 7 +-
.../selftests/bpf/progs/struct_ops_arena.c | 10 ++
.../bpf/progs/struct_ops_arena_autobind.c | 10 ++
.../bpf/progs/struct_ops_arena_member.c | 10 ++
.../progs/struct_ops_arena_member_render.c | 10 ++
.../selftests/bpf/progs/verifier_arena.c | 125 +++++++++---------
.../bpf/progs/verifier_arena_globals1.c | 6 +-
.../bpf/progs/verifier_arena_globals2.c | 3 +-
.../bpf/progs/verifier_arena_large.c | 24 ++--
.../selftests/bpf/progs/verifier_callx.c | 5 +-
.../bpf/progs/verifier_callx_rodata.c | 5 +-
.../selftests/bpf/progs/verifier_ldsx.c | 9 ++
.../selftests/bpf/progs/verifier_zext.c | 9 ++
24 files changed, 247 insertions(+), 117 deletions(-)
--
2.53.0-Meta
next reply other threads:[~2026-10-28 20:42 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-28 20:41 Vineet Gupta [this message]
2026-10-28 20:41 ` [PATCH bpf-next v2 1/8] selftests/bpf: Build callx tests with GCC that defines __BPF_FEATURE_CALLX Vineet Gupta
2026-10-28 21:22 ` bot+bpf-ci
2026-10-28 22:28 ` Vineet Gupta
2026-10-28 20:41 ` [PATCH bpf-next v2 2/8] selftests/bpf: don't pass clang-only warning flags to GCC Vineet Gupta
2026-10-28 20:41 ` [PATCH bpf-next v2 3/8] selftests/bpf: report SKIP for arena tests a compiler cannot build Vineet Gupta
2026-10-28 20:41 ` [PATCH bpf-next v2 4/8] selftests/bpf: make arena_base() opaque to GCC's -Warray-bounds Vineet Gupta
2026-10-28 20:41 ` [PATCH bpf-next v2 5/8] selftests/bpf: don't report arena tests as passing with an empty body Vineet Gupta
2026-10-28 20:41 ` [PATCH bpf-next v2 6/8] selftests/bpf: cast explicitly in the arena subprog and callback faults Vineet Gupta
2026-10-28 20:41 ` [PATCH bpf-next v2 7/8] selftests/bpf: write the mixed arena/scalar ALU tests in asm Vineet Gupta
2026-10-28 21:22 ` bot+bpf-ci
2026-10-28 23:14 ` Vineet Gupta
2026-10-28 20:41 ` [PATCH bpf-next v2 8/8] selftests/bpf: skip the struct_ops arena tests without compiler support Vineet Gupta
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=20261028204158.1021284-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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox