OSDN Git Service

bpf, ppc64: generalize fetching subprog into bpf_jit_get_func_addr
authorDaniel Borkmann <daniel@iogearbox.net>
Mon, 26 Nov 2018 13:05:38 +0000 (14:05 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 27 Nov 2018 01:34:24 +0000 (17:34 -0800)
commite2c95a61656d29ceaac97b6a975c8a1f26e26f15
tree8fb9a3cc00ef0b47edb7428d297bc921b39e1f2f
parent69500127424cd90ff2cf8191256b2ac3b0a4af56
bpf, ppc64: generalize fetching subprog into bpf_jit_get_func_addr

Make fetching of the BPF call address from ppc64 JIT generic. ppc64
was using a slightly different variant rather than through the insns'
imm field encoding as the target address would not fit into that space.
Therefore, the target subprog number was encoded into the insns' offset
and fetched through fp->aux->func[off]->bpf_func instead. Given there
are other JITs with this issue and the mechanism of fetching the address
is JIT-generic, move it into the core as a helper instead. On the JIT
side, we get information on whether the retrieved address is a fixed
one, that is, not changing through JIT passes, or a dynamic one. For
the former, JITs can optimize their imm emission because this doesn't
change jump offsets throughout JIT process.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Sandipan Das <sandipan@linux.ibm.com>
Tested-by: Sandipan Das <sandipan@linux.ibm.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
arch/powerpc/net/bpf_jit_comp64.c
include/linux/filter.h
kernel/bpf/core.c