linux_dsm_epyc7002/arch/s390
Yauheni Kaliuta 1c8f9b91c4 bpf: s390: add JIT support for multi-function programs
This adds support for bpf-to-bpf function calls in the s390 JIT
compiler. The JIT compiler converts the bpf call instructions to
native branch instructions. After a round of the usual passes, the
start addresses of the JITed images for the callee functions are
known. Finally, to fixup the branch target addresses, we need to
perform an extra pass.

Because of the address range in which JITed images are allocated on
s390, the offsets of the start addresses of these images from
__bpf_call_base are as large as 64 bits. So, for a function call,
the imm field of the instruction cannot be used to determine the
callee's address. Use bpf_jit_get_func_addr() helper instead.

The patch borrows a lot from:

commit 8c11ea5ce1 ("bpf, arm64: fix getting subprog addr from aux
for calls")

commit e2c95a6165 ("bpf, ppc64: generalize fetching subprog into
bpf_jit_get_func_addr")

commit 8484ce8306 ("bpf: powerpc64: add JIT support for
multi-function programs")

(including the commit message).

test_verifier (5.3-rc6 with CONFIG_BPF_JIT_ALWAYS_ON=y):

without patch:
Summary: 1501 PASSED, 0 SKIPPED, 47 FAILED

with patch:
Summary: 1540 PASSED, 0 SKIPPED, 8 FAILED

Signed-off-by: Yauheni Kaliuta <yauheni.kaliuta@redhat.com>
Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>
Tested-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
2019-08-31 00:35:50 +02:00
..
appldata proc/sysctl: add shared variables for range check 2019-07-18 17:08:07 -07:00
boot s390/boot: add missing declarations and includes 2019-07-29 18:05:02 +02:00
configs s390: update configs 2019-07-29 18:05:02 +02:00
crypto s390/crypto: sha: Use -ENODEV instead of -EOPNOTSUPP 2019-06-15 12:24:48 +02:00
hypfs s390/hypfs: fix a typo in the name of a function 2019-07-23 10:45:32 +02:00
include s390/boot: add missing declarations and includes 2019-07-29 18:05:02 +02:00
kernel s390/kexec: add missing include to machine_kexec_reloc.c 2019-07-29 18:05:03 +02:00
kvm KVM: s390: Use kvm_vcpu_wake_up in kvm_s390_vcpu_wakeup 2019-07-20 09:00:45 +02:00
lib s390/lib: add missing include 2019-07-29 18:05:02 +02:00
mm s390/mm: add fallthrough annotations 2019-07-29 18:05:03 +02:00
net bpf: s390: add JIT support for multi-function programs 2019-08-31 00:35:50 +02:00
numa
oprofile s390/unwind: introduce stack unwind API 2019-05-02 13:54:11 +02:00
pci s390 updates for the 5.3 merge window #2 2019-07-12 15:39:22 -07:00
purgatory s390/purgatory: update .gitignore 2019-06-04 15:03:42 +02:00
scripts s390: make chkbss work with clang 2019-04-11 13:36:52 +02:00
tools s390/disassembler: update opcode table 2019-06-04 15:03:58 +02:00
Kbuild
Kconfig dma-direct: Force unencrypted DMA under SME for certain DMA masks 2019-07-16 22:15:46 +02:00
Kconfig.debug
Makefile Kconfig updates for v5.3 2019-07-12 16:06:27 -07:00