[PATCH bpf-next v1 00/14] Retire KF_ARENA_ARG kfunc flags

Kumar Kartikeya Dwivedi <[email protected]>
Newsgroups org.kernel.vger.bpf
Message-ID <[email protected]>
KF_ARENA_ARG1 and KF_ARENA_ARG2 duplicate the BTF argument-name suffix
mechanism and only cover the first two kfunc parameters. Retire the flags
from the kernel and resolve_btfids, and describe the arena allocation
kfunc arguments with __arena suffixes instead.

Suffix conversion makes the JIT responsible for translating the 32-bit
arena offset passed by BPF into a kernel address before the kfunc call.
Translate the address back inside the allocation kfuncs so the existing
arena helpers continue to receive lower-32-bit user addresses. Keep free
and reserve non-nullable: an arena starting at the 4 GiB boundary has a
valid first page whose lower 32 bits are zero.

Split the JIT capability hook because kfunc calls and struct_ops callbacks
perform opposite conversions at different boundaries. Add kfunc argument
rebasing to RISC-V, s390, LoongArch, and PowerPC64, and add the reverse
struct_ops conversion to RISC-V, s390, and LoongArch. RISC-V and LoongArch
also need independent fixes for stack-passed arguments in indirect
trampolines.

Extend the shared arena tests to every JIT advertising each capability and
update the conversion-specific expectations and large-arena coverage.

The resulting support now with these changes for __arena suffixes is:

  kfunc arguments:      x86-64, arm64, RISC-V, s390, LoongArch, PowerPC64
  struct_ops arguments: x86-64, arm64, RISC-V, s390, LoongArch

NOTE: The individual JIT patches are not tested by me, and need the acks
of individual JIT maintainers before they can be landed. However, to
truly retire this flag, these changes are necessary so that arena kfuncs
for page allocation and freeing remain functional on those architectures.

Kumar Kartikeya Dwivedi (14):
  bpf: Split arena kfunc and struct_ops JIT capabilities
  bpf, riscv: Fix stack-passed arguments for indirect trampolines
  bpf, riscv: JIT arena kfunc argument rebasing
  bpf, riscv: Convert struct_ops arena arguments in the trampoline
  bpf, s390: JIT arena kfunc argument rebasing
  bpf, s390: Convert struct_ops arena arguments
  bpf, loongarch: Fix stack arguments for indirect trampolines
  bpf, loongarch: JIT arena kfunc argument rebasing
  bpf, loongarch: Convert struct_ops arena arguments in trampolines
  bpf, powerpc: JIT arena kfunc argument rebasing
  bpf: Replace arena kfunc argument flags with suffixes
  resolve_btfids: Drop KF_ARENA_ARG flag support
  selftests/bpf: Exercise arena arguments on every capable JIT
  docs/bpf: Document split arena argument JIT capabilities

 Documentation/bpf/kfuncs.rst                  |  15 +-
 arch/arm64/net/bpf_jit_comp.c                 |   7 +-
 arch/loongarch/net/bpf_jit.c                  |  98 ++++++++++--
 arch/powerpc/net/bpf_jit_comp.c               |   5 +
 arch/powerpc/net/bpf_jit_comp64.c             |  18 ++-
 arch/riscv/net/bpf_jit_comp64.c               | 139 ++++++++++++++++--
 arch/s390/net/bpf_jit_comp.c                  | 118 ++++++++++++++-
 arch/x86/net/bpf_jit_comp.c                   |   7 +-
 include/linux/btf.h                           |   2 -
 include/linux/filter.h                        |   3 +-
 kernel/bpf/arena.c                            |  40 +++--
 kernel/bpf/core.c                             |   7 +-
 kernel/bpf/verifier.c                         |   4 +-
 tools/bpf/resolve_btfids/main.c               |  22 +--
 .../selftests/bpf/prog_tests/resolve_btfids.c |  22 +--
 .../bpf/prog_tests/test_struct_ops_arena.c    |  16 +-
 .../testing/selftests/bpf/progs/arena_kfunc.c |  36 +++++
 .../selftests/bpf/progs/arena_kfunc_jit.c     |  16 +-
 tools/testing/selftests/bpf/progs/bpf_misc.h  |   1 +
 .../selftests/bpf/progs/verifier_arena.c      |   6 +
 .../bpf/progs/verifier_arena_large.c          |   4 +-
 tools/testing/selftests/bpf/test_loader.c     |   5 +
 22 files changed, 487 insertions(+), 104 deletions(-)


base-commit: 669e4fa766000ae4137bb02eb22ce75ba78ad32d
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.