Re: [PATCH bpf-next v7 3/9] selftests/bpf: Move bpf_arena_spin_lock.h to the top level

Kumar Kartikeya Dwivedi
2026-04-12T19:31:54Z

On Sun, 12 Apr 2026 at 19:45, Emil Tsalapatis <emil@etsalapatis.com> wrote:
>
> The bpf_arena_spin_lock.h header is useful for all programs and not
> just the selftests. Move it to the top level of the BPF selftests
> to make it more readily accessible.
>

Please add something to the log to explain why __weak is needed, as
indicated in https://lore.kernel.org/bpf/CAP01T77GwHgS04TM8yTODyiXh2VJq-=L0FPoRvjpfF4dc6T9zw@mail.gmail.com.

Also, since we discussed already, why not move this to libarena?

> Signed-off-by: Emil Tsalapatis <emil@etsalapatis.com>
> Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
> Acked-by: Song Liu <song@kernel.org>
> ---
> .../selftests/bpf/{progs => }/bpf_arena_spin_lock.h | 4 ++--
> tools/testing/selftests/bpf/prog_tests/arena_spin_lock.c | 7 -------
> tools/testing/selftests/bpf/progs/arena_spin_lock.c | 2 +-
> 3 files changed, 3 insertions(+), 10 deletions(-)
> rename tools/testing/selftests/bpf/{progs => }/bpf_arena_spin_lock.h (99%)
>
> diff --git a/tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h b/tools/testing/selftests/bpf/bpf_arena_spin_lock.h
> similarity index 99%
> rename from tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h
> rename to tools/testing/selftests/bpf/bpf_arena_spin_lock.h
> index f90531cf3ee5..680c9e6cb35d 100644
> --- a/tools/testing/selftests/bpf/progs/bpf_arena_spin_lock.h
> +++ b/tools/testing/selftests/bpf/bpf_arena_spin_lock.h
> @@ -107,7 +107,7 @@ struct arena_qnode {
> #define _Q_LOCKED_VAL (1U << _Q_LOCKED_OFFSET)
> #define _Q_PENDING_VAL (1U << _Q_PENDING_OFFSET)
>
> -struct arena_qnode __arena qnodes[_Q_MAX_CPUS][_Q_MAX_NODES];
> +struct arena_qnode __weak __arena __hidden qnodes[_Q_MAX_CPUS][_Q_MAX_NODES];
>
> static inline u32 encode_tail(int cpu, int idx)
> {
> @@ -240,7 +240,7 @@ static __always_inline int arena_spin_trylock(arena_spinlock_t __arena *lock)
> return likely(atomic_try_cmpxchg_acquire(&lock->val, &val, _Q_LOCKED_VAL));
> }
>
> -__noinline
> +__noinline __weak
> int arena_spin_lock_slowpath(arena_spinlock_t __arena __arg_arena *lock, u32 val)
> {
> struct arena_mcs_spinlock __arena *prev, *next, *node0, *node;
> diff --git a/tools/testing/selftests/bpf/prog_tests/arena_spin_lock.c b/tools/testing/selftests/bpf/prog_tests/arena_spin_lock.c
> index 693fd86fbde6..acb9d53b5973 100644
> --- a/tools/testing/selftests/bpf/prog_tests/arena_spin_lock.c
> +++ b/tools/testing/selftests/bpf/prog_tests/arena_spin_lock.c
> @@ -5,13 +5,6 @@
> #include <sys/sysinfo.h>
>
> struct __qspinlock { int val; };
> -typedef struct __qspinlock arena_spinlock_t;
> -
> -struct arena_qnode {
> - unsigned long next;
> - int count;
> - int locked;
> -};
>
> #include "arena_spin_lock.skel.h"
>
> diff --git a/tools/testing/selftests/bpf/progs/arena_spin_lock.c b/tools/testing/selftests/bpf/progs/arena_spin_lock.c
> index 086b57a426cf..6c04e7707644 100644
> --- a/tools/testing/selftests/bpf/progs/arena_spin_lock.c
> +++ b/tools/testing/selftests/bpf/progs/arena_spin_lock.c
> @@ -4,7 +4,7 @@
> #include <bpf/bpf_tracing.h>
> #include <bpf/bpf_helpers.h>
> #include "bpf_misc.h"
> -#include "bpf_arena_spin_lock.h"
> +#include "../bpf_arena_spin_lock.h"
>
> struct {
> __uint(type, BPF_MAP_TYPE_ARENA);
> --
> 2.53.0
>