Le 05/08/2025 à 08:27, Saket Kumar Bhaskar a écrit :
This patch series introduces support for the PROBE_MEM32,
bpf_addr_space_cast and PROBE_ATOMIC instructions in the powerpc BPF JIT,
facilitating the implementation of BPF arena and arena atomics.
This series seems to be limited to powerpc64. Please make it explicit in
all patches subject, see exemple below:
$ git log --oneline arch/powerpc/net/bpf_jit_comp64.c
cf2a6de32cabb (tag: powerpc-6.17-2, origin/next-test, origin/next)
powerpc64/bpf: Add jit support for load_acquire and store_release
59ba025948be2 powerpc/bpf: fix JIT code size calculation of bpf trampoline
d243b62b7bd3d powerpc64/bpf: Add support for bpf trampolines
9670f6d2097c4 powerpc64/bpf: Fold bpf_jit_emit_func_call_hlp() into
bpf_jit_emit_func_call_rel()
fde318326daa4 powerpc64/bpf: jit support for signed division and modulo
597b1710982d1 powerpc64/bpf: jit support for sign extended mov
717756c9c8dda powerpc64/bpf: jit support for sign extended load
a71c0b09a14db powerpc64/bpf: jit support for unconditional byte swap
3c086ce222cef powerpc64/bpf: jit support for 32bit offset jmp instruction
b1e7cee961274 powerpc/bpf: enforce full ordering for ATOMIC operations
with BPF_FETCH
61688a82e047a powerpc/bpf: enable kfunc call
The last patch in the series has fix for arena spinlock selftest
failure.
This series is rebased on top of:
https://lore.kernel.org/bpf/20250717202935.29018-2-puran...@kernel.org/
All selftests related to bpf_arena, bpf_arena_atomic(except
load_acquire/store_release) enablement are passing:
# ./test_progs -t arena_list
#5/1 arena_list/arena_list_1:OK
#5/2 arena_list/arena_list_1000:OK
#5 arena_list:OK
Summary: 1/2 PASSED, 0 SKIPPED, 0 FAILED
# ./test_progs -t arena_htab
#4/1 arena_htab/arena_htab_llvm:OK
#4/2 arena_htab/arena_htab_asm:OK
#4 arena_htab:OK
Summary: 1/2 PASSED, 0 SKIPPED, 0 FAILED
# ./test_progs -t verifier_arena
#464/1 verifier_arena/basic_alloc1:OK
#464/2 verifier_arena/basic_alloc2:OK
#464/3 verifier_arena/basic_alloc3:OK
#464/4 verifier_arena/iter_maps1:OK
#464/5 verifier_arena/iter_maps2:OK
#464/6 verifier_arena/iter_maps3:OK
#464 verifier_arena:OK
#465/1 verifier_arena_large/big_alloc1:OK
#465/2 verifier_arena_large/big_alloc2:OK
#465 verifier_arena_large:OK
Summary: 2/8 PASSED, 0 SKIPPED, 0 FAILED
# ./test_progs -t arena_atomics
#3/1 arena_atomics/add:OK
#3/2 arena_atomics/sub:OK
#3/3 arena_atomics/and:OK
#3/4 arena_atomics/or:OK
#3/5 arena_atomics/xor:OK
#3/6 arena_atomics/cmpxchg:OK
#3/7 arena_atomics/xchg:OK
#3/8 arena_atomics/uaf:OK
#3/9 arena_atomics/load_acquire:SKIP
#3/10 arena_atomics/store_release:SKIP
#3 arena_atomics:OK (SKIP: 2/10)
Summary: 1/8 PASSED, 2 SKIPPED, 0 FAILED
All selftests related to arena_spin_lock are passing:
# ./test_progs -t arena_spin_lock
#6/1 arena_spin_lock/arena_spin_lock_1:OK
#6/2 arena_spin_lock/arena_spin_lock_1000:OK
#6/3 arena_spin_lock/arena_spin_lock_50000:OK
#6 arena_spin_lock:OK
Summary: 1/3 PASSED, 0 SKIPPED, 0 FAILED
Saket Kumar Bhaskar (6):
bpf,powerpc: Introduce bpf_jit_emit_probe_mem_store() to emit store
instructions
bpf,powerpc: Implement PROBE_MEM32 pseudo instructions
bpf,powerpc: Implement bpf_addr_space_cast instruction
bpf,powerpc: Introduce bpf_jit_emit_atomic_ops() to emit atomic
instructions
bpf,powerpc: Implement PROBE_ATOMIC instructions
selftests/bpf: Fix arena_spin_lock selftest failure
arch/powerpc/net/bpf_jit.h | 6 +-
arch/powerpc/net/bpf_jit_comp.c | 32 +-
arch/powerpc/net/bpf_jit_comp32.c | 2 +-
arch/powerpc/net/bpf_jit_comp64.c | 378 +++++++++++++-----
.../bpf/prog_tests/arena_spin_lock.c | 23 +-
.../selftests/bpf/progs/arena_spin_lock.c | 8 +-
.../selftests/bpf/progs/bpf_arena_spin_lock.h | 4 +-
7 files changed, 348 insertions(+), 105 deletions(-)
base-commit: ea2aecdf7a954a8c0015e185cc870c4191d1d93f