]> git.baikalelectronics.ru Git - kernel.git/commit
bpf, arm64: use more scalable stadd over ldxr / stxr loop in xadd
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 26 Apr 2019 19:48:22 +0000 (21:48 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 27 Apr 2019 01:53:40 +0000 (18:53 -0700)
commitf883ca61c8756ece9fabebad80be34dcf5753658
tree00146898135b5e972cea6c930509f1ecdf8fc1ad
parent86c39903abeb9f338509cfa50ac9116db7d6f537
bpf, arm64: use more scalable stadd over ldxr / stxr loop in xadd

Since ARMv8.1 supplement introduced LSE atomic instructions back in 2016,
lets add support for STADD and use that in favor of LDXR / STXR loop for
the XADD mapping if available. STADD is encoded as an alias for LDADD with
XZR as the destination register, therefore add LDADD to the instruction
encoder along with STADD as special case and use it in the JIT for CPUs
that advertise LSE atomics in CPUID register. If immediate offset in the
BPF XADD insn is 0, then use dst register directly instead of temporary
one.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
arch/arm64/include/asm/insn.h
arch/arm64/kernel/insn.c
arch/arm64/net/bpf_jit.h
arch/arm64/net/bpf_jit_comp.c