powerpc/bpf: enable kfunc call
authorHari Bathini <hbathini@linux.ibm.com>
Thu, 2 May 2024 17:32:05 +0000 (23:02 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 6 May 2024 12:05:18 +0000 (22:05 +1000)
commit61688a82e047a4166436bf2665716cc070572ffa
tree09628b901852a720ed6b8c9b8d6654109123a57f
parent2ecfe59cd7de1f202e9af2516a61fbbf93d0bd4d
powerpc/bpf: enable kfunc call

Currently, bpf jit code on powerpc assumes all the bpf functions and
helpers to be part of core kernel text. This is false for kfunc case,
as function addresses may not be part of core kernel text area. So,
add support for addresses that are not within core kernel text area
too, to enable kfunc support. Emit instructions based on whether the
function address is within core kernel text address or not, to retain
optimized instruction sequence where possible.

In case of PCREL, as a bpf function that is not within core kernel
text area is likely to go out of range with relative addressing on
kernel base, use PC relative addressing. If that goes out of range,
load the full address with PPC_LI64().

With addresses that are not within core kernel text area supported,
override bpf_jit_supports_kfunc_call() to enable kfunc support. Also,
override bpf_jit_supports_far_kfunc_call() to enable 64-bit pointers,
as an address offset can be more than 32-bit long on PPC64.

Signed-off-by: Hari Bathini <hbathini@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240502173205.142794-2-hbathini@linux.ibm.com
arch/powerpc/net/bpf_jit_comp.c
arch/powerpc/net/bpf_jit_comp64.c