projects
/
linux-2.6-microblaze.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
e944fc8
)
riscv, bpf: Try RVC for reg move within BPF_CMPXCHG JIT
author
Xiao Wang
<xiao.w.wang@intel.com>
Sun, 19 May 2024 05:05:07 +0000
(13:05 +0800)
committer
Daniel Borkmann
<daniel@iogearbox.net>
Fri, 24 May 2024 15:40:33 +0000
(17:40 +0200)
We could try to emit compressed insn for reg move operation during CMPXCHG
JIT, the instruction compression has no impact on the jump offsets of
following forward and backward jump instructions.
Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Björn Töpel <bjorn@kernel.org>
Link:
https://lore.kernel.org/bpf/20240519050507.2217791-1-xiao.w.wang@intel.com
arch/riscv/net/bpf_jit_comp64.c
patch
|
blob
|
history
diff --git
a/arch/riscv/net/bpf_jit_comp64.c
b/arch/riscv/net/bpf_jit_comp64.c
index
c21a0ff
..
2bc4c14
100644
(file)
--- a/
arch/riscv/net/bpf_jit_comp64.c
+++ b/
arch/riscv/net/bpf_jit_comp64.c
@@
-537,8
+537,10
@@
static void emit_atomic(u8 rd, u8 rs, s16 off, s32 imm, bool is64,
/* r0 = atomic_cmpxchg(dst_reg + off16, r0, src_reg); */
case BPF_CMPXCHG:
r0 = bpf_to_rv_reg(BPF_REG_0, ctx);
- emit(is64 ? rv_addi(RV_REG_T2, r0, 0) :
- rv_addiw(RV_REG_T2, r0, 0), ctx);
+ if (is64)
+ emit_mv(RV_REG_T2, r0, ctx);
+ else
+ emit_addiw(RV_REG_T2, r0, 0, ctx);
emit(is64 ? rv_lr_d(r0, 0, rd, 0, 0) :
rv_lr_w(r0, 0, rd, 0, 0), ctx);
jmp_offset = ninsns_rvoff(8);