From: sashiko-bot@kernel.org
To: "Alexei Starovoitov" <alexei.starovoitov@gmail.com>, bpf@vger.kernel.org
Subject: Re: [PATCH bpf-next v4 46/46] selftests/bpf: Test progs without bpf_for(), zero, can_loop and such
Date: Sat, 07 Nov 2026 04:37:40 +0000 [thread overview]
Message-ID: <sashiko-outbox-202589@kernel.org> (raw)
In-Reply-To: <20261107033758.1547725-47-alexei.starovoitov@gmail.com>
Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [Medium] selftests/bpf: missing BTF kfunc skip check in
test_plain_c_test_wakeup_source()
- [Low] selftests/bpf: missing __skip_without_arena in plain_c
arena_htab and arena_list
--
commit 803ffb91b4f8392f64289683ec7ad50605335c6c
Author: Alexei Starovoitov <ast@kernel.org>
selftests/bpf: Test progs without bpf_for(), zero, can_loop and such
This commit adds plain-C versions of existing BPF selftest programs
without verifier-oriented loop macros and workarounds, along with test
runners in prog_tests/plain_c.c.
> diff --git a/tools/testing/selftests/bpf/prog_tests/plain_c.c b/tools/testing/selftests/bpf/prog_tests/plain_c.c
> new file mode 100644
> index 0000000000000..b7305118a4541
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/prog_tests/plain_c.c
> @@ -0,0 +1,160 @@
[ ... ]
> +/* prog_tests/arena_list.c: add 1000 elems, delete them, compare the sums */
> +static void arena_list_add_del(void)
> +{
> + LIBBPF_OPTS(bpf_test_run_opts, opts);
> + struct plain_c_arena_list *skel;
> + int cnt = 1000, sum = cnt * (cnt - 1) / 2;
> +
> + skel = plain_c_arena_list__open_and_load();
> + if (!ASSERT_OK_PTR(skel, "open_and_load"))
> + return;
> + skel->bss->cnt = cnt;
> + ASSERT_OK(bpf_prog_test_run_opts(bpf_program__fd(skel->progs.arena_list_add), &opts),
> + "add");
> + if (skel->bss->skip) {
> + test__skip();
> + goto out;
> + }
[ ... ]
> +void test_plain_c_arena_htab(void) { RUN(arena_htab); }
> +void test_plain_c_arena_htab_asm(void) { RUN(arena_htab_asm); }
> +
> +void test_plain_c_arena_list(void)
> +{
> + RUN(arena_list);
> + if (test__start_subtest("run"))
> + arena_list_add_del();
> +}
[ ... ]
> +void test_plain_c_test_wakeup_source(void) { RUN(test_wakeup_source); }
[Severity: Medium]
Does test_plain_c_test_wakeup_source() fail when CONFIG_PM_SLEEP is not
enabled in the kernel (for example on s390x, where ARCH_SUSPEND_POSSIBLE
and ARCH_HIBERNATION_POSSIBLE are not supported)?
plain_c_test_wakeup_source.c declares bpf_wakeup_sources_read_lock(),
bpf_wakeup_sources_read_unlock(), and bpf_wakeup_sources_get_head() as
strong __ksym externs. Unlike test_wakeup_source() in
prog_tests/wakeup_source.c, which checks vmlinux BTF for
bpf_wakeup_sources_get_head and calls test__skip() when absent,
test_plain_c_test_wakeup_source() unconditionally invokes
RUN(test_wakeup_source), causing bpf_object__load() to fail with
unresolved kfunc externs.
> diff --git a/tools/testing/selftests/bpf/progs/plain_c_arena_htab.c b/tools/testing/selftests/bpf/progs/plain_c_arena_htab.c
> new file mode 100644
> index 0000000000000..10a50b5058ddb
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/progs/plain_c_arena_htab.c
> @@ -0,0 +1,222 @@
[ ... ]
> +SEC("syscall")
> +__success __retval(0)
> +#if !defined(__clang__) && defined(BPF_ARENA_FORCE_ASM)
> +__skip("GCC calls htab_init(): a global function gets an arena pointer as a scalar")
> +#endif
> +int arena_htab_llvm(void *ctx)
> +{
> +#if defined(__BPF_FEATURE_ADDR_SPACE_CAST) || defined(BPF_ARENA_FORCE_ASM)
[ ... ]
> +#else
> + skip = true;
> +#endif
> + return 0;
> +}
[Severity: Low]
Should arena_htab_llvm() (when BPF_ARENA_FORCE_ASM is not defined) and
arena_list_add() / arena_list_del() in plain_c_arena_list.c be annotated
with __skip_without_arena, similar to plain_c_arena_strsearch.c and
plain_c_verifier_arena_large.c?
Without __BPF_FEATURE_ADDR_SPACE_CAST (such as in test_progs-bpf_gcc or
test_progs-no_alu32), these programs compile to `skip = true; return 0;`,
and RUN(arena_htab) and RUN(arena_list) load the no-op stubs via
test_loader without checking skel->bss->skip, reporting OK instead of
SKIP. Also, arena_list_add_del() in prog_tests/plain_c.c calls
test__skip() without printing a reason message.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261107033758.1547725-1-alexei.starovoitov@gmail.com?part=46
next prev parent reply other threads:[~2026-11-07 4:37 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-07 3:37 [PATCH bpf-next v4 00/46] bpf: A verifier that joins states Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 01/46] bpf: Add may_goto to the loops that the verifier marks Alexei Starovoitov
2026-11-07 4:12 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 02/46] bpf: Limit depth and time of recursive subprogs at run time Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 03/46] bpf: Add union and widening of the range of a register Alexei Starovoitov
2026-11-07 4:19 ` bot+bpf-ci
2026-11-07 3:37 ` [PATCH bpf-next v4 04/46] bpf: Add join of registers and stack slots Alexei Starovoitov
2026-11-07 4:18 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 05/46] bpf: Add join of verifier states Alexei Starovoitov
2026-11-07 4:18 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 06/46] bpf: Tell which arguments of a call a join must leave alone Alexei Starovoitov
2026-11-07 4:19 ` bot+bpf-ci
2026-11-07 3:37 ` [PATCH bpf-next v4 07/46] bpf: Add the data structures of the main pass over the control flow graph Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 08/46] bpf: Order the insns, find what stops a loop and where may_goto can go Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 09/46] bpf: Find the registers that hold a number or a pointer to arena Alexei Starovoitov
2026-11-07 4:11 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 10/46] bpf: Find the registers and stack slots that later checks depend on Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 11/46] bpf: Add the sets of states at an insn and the entries of functions Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 12/46] bpf: Compare states of different iterations of a loop Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 13/46] bpf: Decide which states are not joined Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 14/46] bpf: Merge the state that arrives into the set at an insn Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 15/46] bpf: Move states along edges, into loops and subprogs and out of them Alexei Starovoitov
2026-11-07 4:19 ` bot+bpf-ci
2026-11-07 3:37 ` [PATCH bpf-next v4 16/46] bpf: Make the state after a call from the caller's state and an exit state Alexei Starovoitov
2026-11-07 4:12 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 17/46] bpf: Enter and leave loops in the main pass, build flow.c Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 18/46] bpf: Tell the passes over the graph where an added may_goto goes Alexei Starovoitov
2026-11-07 4:10 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 19/46] bpf: Verify programs as a fixpoint over the control flow graph Alexei Starovoitov
2026-11-07 4:33 ` bot+bpf-ci
2026-11-07 4:40 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 20/46] bpf: Keep the count of a loop when a register has no closed form Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 21/46] bpf: Verify static subprogs on their own Alexei Starovoitov
2026-11-07 4:53 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 22/46] bpf: Allow recursive subprogs Alexei Starovoitov
2026-11-07 4:33 ` bot+bpf-ci
2026-11-07 4:48 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 23/46] bpf: Remove is_state_visited(), bpf_compute_scc() and iter.depth Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 24/46] bpf: Remove precision tracking Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 25/46] bpf: Remove prune points, levels of state comparison and pop_stack() Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 26/46] bpf: Update comments about paths, pruning and explored states Alexei Starovoitov
2026-11-07 4:03 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 27/46] bpf: Track a pointer to one of a set of functions Alexei Starovoitov
2026-11-07 4:31 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 28/46] bpf: callx reads what the subprogs whose address is taken read Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 29/46] bpf: Keep the first iteration of a counted loop apart Alexei Starovoitov
2026-11-07 4:34 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 30/46] bpf: What a call returns in each iteration is like what the loop loads Alexei Starovoitov
2026-11-07 4:26 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 31/46] bpf: Find where the jumps of a loop stop a number Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 32/46] bpf: A loop is one iteration shorter behind the jump that counts it Alexei Starovoitov
2026-11-07 4:19 ` bot+bpf-ci
2026-11-07 4:28 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 33/46] bpf: Give the places of a back edge to the jumps that count Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 34/46] bpf: Count a loop whose exit tests a copy of the counter Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 35/46] bpf: Allow tail calls and LD_ABS in subprogs that return void Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 36/46] bpf: A part of a pointer that is spilled is a number Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 37/46] bpf: 32-bit add to a pointer and pointer op pointer make " Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 38/46] selftests/bpf: Adjust tests to log lines that are gone Alexei Starovoitov
2026-11-07 4:19 ` bot+bpf-ci
2026-11-07 3:37 ` [PATCH bpf-next v4 39/46] selftests/bpf: Adjust tests to new verdicts, messages and order Alexei Starovoitov
2026-11-07 4:24 ` sashiko-bot
2026-11-07 3:37 ` [PATCH bpf-next v4 40/46] selftests/bpf: Test states that are not joined Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 41/46] selftests/bpf: Test static subprogs that are verified on their own Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 42/46] selftests/bpf: Test loops that are counted, walked or widened Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 43/46] selftests/bpf: Test progs that run out of budget Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 44/46] selftests/bpf: Test callx of one of a set of functions Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 45/46] selftests/bpf: Test pointers that become numbers and subprogs that return void Alexei Starovoitov
2026-11-07 3:37 ` [PATCH bpf-next v4 46/46] selftests/bpf: Test progs without bpf_for(), zero, can_loop and such Alexei Starovoitov
2026-11-07 4:19 ` bot+bpf-ci
2026-11-07 4:37 ` sashiko-bot [this message]
2026-11-07 5:00 ` [PATCH bpf-next v4 00/46] bpf: A verifier that joins states 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=sashiko-outbox-202589@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=alexei.starovoitov@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=sashiko-reviews@lists.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