From: sashiko-bot@kernel.org
To: "George Guo" <dongtai.guo@linux.dev>
Cc: bpf@vger.kernel.org
Subject: Re: [PATCH bpf] selftests/bpf: Skip libarena when the BPF backend lacks 32-bit arena cmpxchg
Date: Tue, 30 Jun 2026 03:16:33 +0000 [thread overview]
Message-ID: <20260630031633.7AE7C1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260630025809.74043-1-dongtai.guo@linux.dev>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [High] The patch misdiagnoses the root cause of the Clang crash and implements a workaround that incorrectly skips `libarena` tests instead of fixing the underlying build configuration.
Pre-existing issues:
- [High] The patch fails to apply the new 32-bit cmpxchg guard to the ASAN variant of `libarena`, leaving the selftests build vulnerable to the exact same compiler crash it attempts to fix.
--
commit e34c5b107c762422f1dc3835420230ecdcd78708
Author: George Guo <guodongtai@kylinos.cn>
selftests/bpf: Skip libarena when the BPF backend lacks 32-bit arena cmpxchg
This patch introduces a feature probe to detect if the BPF backend supports
32-bit arena cmpxchg operations. It skips building libarena and its
dependent tests if the operation is unsupported to prevent build aborts.
> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> index b642ee489ea64..0098d892cb39e 100644
> --- a/tools/testing/selftests/bpf/Makefile
> +++ b/tools/testing/selftests/bpf/Makefile
[ ... ]
> @@ -91,6 +91,17 @@ CLANG_HAS_ARENA_ASAN := $(shell echo 'int x;' | \
> -mllvm -asan-shadow-addr-space=1 \
> -x c -c - -o /dev/null 2>/dev/null && echo 1)
>
> +# The arena qspinlock used by libarena performs a 32-bit atomic cmpxchg on an
> +# arena (address space 1) pointer. Not every LLVM BPF backend can select it;
> +# older releases bail out with "unsupported atomic operation, please use 64 bit
> +# version", which aborts the whole selftests build. Probe for the operation and
> +# skip libarena (and its dependent tests) when the backend cannot handle it.
> +CLANG_HAS_ARENA_CMPXCHG32 := $(shell printf '%s\n' \
> + 'struct s { int counter; };' \
> + 'int f(struct s __attribute__((address_space(1))) *l, int o, int n)' \
> + '{ return __sync_val_compare_and_swap(&l->counter, o, n); }' | \
> + $(CLANG) --target=bpf -O2 -x c -c - -o /dev/null 2>/dev/null && echo 1)
> +
[Severity: High]
Does this feature probe artificially fail by omitting the -mcpu=v4 flag?
Because the probe runs against the default BPF CPU target (which lacks 32-bit
atomic support), it will falsely report that the backend lacks support and
unnecessarily skip the tests.
Could the actual root cause of the build failure be that libarena's
BPF_CFLAGS in tools/testing/selftests/bpf/libarena/Makefile is missing
the -mcpu=v4 flag?
For example, test_progs-cpuv4 successfully compiles progs/arena_spin_lock.c
because it explicitly passes -mcpu=v4. Would adding -mcpu=v4 to the
libarena Makefile fix the compilation error natively instead of skipping
the tests entirely?
> # Order correspond to 'make run_tests' order
> TEST_GEN_PROGS = test_verifier test_tag test_maps test_lru_map test_progs \
> test_sockmap \
[ ... ]
> @@ -835,10 +846,13 @@ LIBARENA_BPF_DEPS := $(wildcard libarena/Makefile \
> libarena/selftests/* \
> libarena/*.bpf.o)
>
> +ifneq ($(CLANG_HAS_ARENA_CMPXCHG32),)
> LIBARENA_SKEL := libarena/libarena.skel.h
> +CFLAGS += -DHAS_BPF_ARENA
>
> $(LIBARENA_SKEL): $(INCLUDE_DIR)/vmlinux.h $(BPFOBJ) $(LIBARENA_BPF_DEPS)
> +$(MAKE) -C libarena libarena.skel.h $(LIBARENA_MAKE_ARGS)
> +endif
>
> ifneq ($(CLANG_HAS_ARENA_ASAN),)
> LIBARENA_ASAN_SKEL := libarena/libarena_asan.skel.h
[Severity: High]
This is a pre-existing issue, but doesn't the ASAN variant of libarena
also need protection from this compiler crash?
The LIBARENA_ASAN_SKEL build is only guarded by CLANG_HAS_ARENA_ASAN, which
checks for ASAN flag support but not 32-bit cmpxchg support.
Since the ASAN build compiles the exact same buddy.bpf.c source code
containing the 32-bit arena cmpxchg, the compiler will still crash here
with the exact same "Cannot select: AtomicCmpSwap" error if the target
lacks 32-bit atomics.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260630025809.74043-1-dongtai.guo@linux.dev?part=1
next prev parent reply other threads:[~2026-06-30 3:16 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-30 2:58 [PATCH bpf] selftests/bpf: Skip libarena when the BPF backend lacks 32-bit arena cmpxchg George Guo
2026-06-30 3:16 ` sashiko-bot [this message]
2026-06-30 18:06 ` Alexei Starovoitov
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=20260630031633.7AE7C1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=dongtai.guo@linux.dev \
--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