Andrii Nakryiko wrote: > Add a new BPF instruction for resolving absolute addresses of per-CPU > data from their per-CPU offsets. This instruction is internal-only and > users are not allowed to use them directly. They will only be used for > internal inlining optimizations for now between BPF verifier and BPF JITs. > > We use a special BPF_MOV | BPF_ALU64 | BPF_X form with insn->off field > set to BPF_ADDR_PERCPU = -1. I used negative offset value to distinguish > them from positive ones used by user-exposed instructions. > > Such instruction performs a resolution of a per-CPU offset stored in > a register to a valid kernel address which can be dereferenced. It is > useful in any use case where absolute address of a per-CPU data has to > be resolved (e.g., in inlining bpf_map_lookup_elem()). > > BPF disassembler is also taught to recognize them to support dumping > final BPF assembly code (non-JIT'ed version). > > Add arch-specific way for BPF JITs to mark support for this instructions. > > This patch also adds support for these instructions in x86-64 BPF JIT. > > Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > --- > arch/x86/net/bpf_jit_comp.c | 16 ++++++++++++++++ > include/linux/filter.h | 20 ++++++++++++++++++++ > kernel/bpf/core.c | 5 +++++ > kernel/bpf/disasm.c | 14 ++++++++++++++ > 4 files changed, 55 insertions(+) LGTM Acked-by: John Fastabend <john.fastabend@xxxxxxxxx>