]> 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)
commit31de3cad92252b26755aa62e1c571d1ffe9ea8c5
tree00146898135b5e972cea6c930509f1ecdf8fc1ad
parent2645d4e50f263af2f81bbd38c1725568e7b570eb
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