[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