summaryrefslogtreecommitdiff
path: root/tools/perf/scripts/python/task-analyzer.py
diff options
context:
space:
mode:
authorKumar Kartikeya Dwivedi <memxor@gmail.com>2026-08-14 05:55:05 +0200
committerKumar Kartikeya Dwivedi <memxor@gmail.com>2026-08-14 05:55:05 +0200
commit409a9bda0429c63f326576cbe6c1f6c4430a8d09 (patch)
tree721453802fd6bf3814f4263a3bbcc9acd1157fb9 /tools/perf/scripts/python/task-analyzer.py
parent4d9551b39aeb5d32beb4d795ce2892e7690a3e93 (diff)
parent197d34b169435a447830ddd915d596431b9f311a (diff)
Merge branch 'bpf-arm64-__arena-kfunc-and-struct_ops-arguments'
Puranjay Mohan says: ==================== bpf, arm64: __arena kfunc and struct_ops arguments The x86-64 JIT recently gained support for the __arena and __arena__nullable argument suffixes on kfuncs and struct_ops stubs. This adds the arm64 side and flips bpf_jit_supports_arena_args() on, so the verifier stops rejecting these programs on arm64. Patch 1 is an independent fix. save_args() reads stack-passed arguments at FP + 32, which only holds when the trampoline is entered through the fentry call and two frame records are pushed. A struct_ops trampoline is entered via blr and pushes one frame fewer, so its stack arguments start at FP + 16 and every one of them was read two slots off. No struct_ops member passed arguments on the stack until the test added by commit 2d4de9a493a0, which is why this went unnoticed. It carries a Fixes tag and can be taken separately; note that the test covering it only runs on arm64 once the rest of this series lands. Patch 2 adds an ADD/SUB (extended register) encoder to the insn library, so the JIT can zero-extend and add in one instruction. Patches 3 and 4 are the JIT work. A kfunc argument is rebased onto the arena base at the call site: add xN, x28, wN, uxtw and a nullable one skips the add so NULL stays NULL: mov wN, wN cbz wN, 1f add xN, x28, wN, uxtw 1: A struct_ops callback converts in the other direction, in the trampoline while saving arguments into the BPF ctx, with the low half of the arena base kept in x11: sub w10, wsrc, w11 str x10, [sp, #slot] Patches 5 and 6 add arm64 JIT-sequence assertions and drop the x86-64 gating from the existing arena argument tests. Patch 7 is arch-neutral: it adds a struct_ops member whose first argument is a 16-byte struct passed by value, so the arena pointer does not land at the ctx slot its argument index suggests. Nothing covered that before, and it is the case patch 4 has to get right. Changelog: V1: https://lore.kernel.org/bpf/20260810190922.3408757-1-puranjay@kernel.org/ Changes in v2: - patch 2: fix the decode masks for the new extended-register predicates, 0x7F200000 -> 0x7FE00000. opt in bits 23:22 is part of the opcode here rather than a shift type, and any value other than 00 is unallocated (Xu Kuohai). Also noted in the commit message. No functional change: the masks only feed aarch64_insn_is_*_ext(), which has no in-tree callers, while the encoder uses aarch64_insn_get_*_ext_value(). - patch 4: comment why the conversion in the stack-argument loop is not guarded by for_call_origin (Xu Kuohai). - collect Reviewed-by/Acked-by from Xu Kuohai. - rebase onto current bpf-next. ==================== Link: https://patch.msgid.link/20260813190356.335181-1-puranjay@kernel.org Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Diffstat (limited to 'tools/perf/scripts/python/task-analyzer.py')
0 files changed, 0 insertions, 0 deletions