public inbox for bpf@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next 0/7] Add support cpu v4 insns for RV64
@ 2023-08-23 23:10 Pu Lehui
  2023-08-23 23:10 ` [PATCH bpf-next 1/7] riscv, bpf: Fix missing exception handling and redundant zext for LDX_B/H/W Pu Lehui
                   ` (6 more replies)
  0 siblings, 7 replies; 21+ messages in thread
From: Pu Lehui @ 2023-08-23 23:10 UTC (permalink / raw)
  To: linux-riscv, bpf, netdev, linux-kernel
  Cc: Björn Töpel, Yonghong Song, Alexei Starovoitov,
	Daniel Borkmann, Andrii Nakryiko, Martin KaFai Lau, Song Liu,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Palmer Dabbelt, Xu Kuohai, Puranjay Mohan, Pu Lehui, Pu Lehui

Add support cpu v4 instructions for RV64. The relevant tests have passed as show bellow:

# ./test_progs-cpuv4 -a ldsx_insn,verifier_sdiv,verifier_movsx,verifier_ldsx,verifier_gotol,verifier_bswap
#116/1   ldsx_insn/map_val and probed_memory:OK
#116/2   ldsx_insn/ctx_member_sign_ext:OK
#116/3   ldsx_insn/ctx_member_narrow_sign_ext:OK
#116     ldsx_insn:OK
#309/1   verifier_bswap/BSWAP, 16:OK
#309/2   verifier_bswap/BSWAP, 16 @unpriv:OK
#309/3   verifier_bswap/BSWAP, 32:OK
#309/4   verifier_bswap/BSWAP, 32 @unpriv:OK
#309/5   verifier_bswap/BSWAP, 64:OK
#309/6   verifier_bswap/BSWAP, 64 @unpriv:OK
#309     verifier_bswap:OK
#323/1   verifier_gotol/gotol, small_imm:OK
#323/2   verifier_gotol/gotol, small_imm @unpriv:OK
#323     verifier_gotol:OK
#331/1   verifier_ldsx/LDSX, S8:OK
#331/2   verifier_ldsx/LDSX, S8 @unpriv:OK
#331/3   verifier_ldsx/LDSX, S16:OK
#331/4   verifier_ldsx/LDSX, S16 @unpriv:OK
#331/5   verifier_ldsx/LDSX, S32:OK
#331/6   verifier_ldsx/LDSX, S32 @unpriv:OK
#331/7   verifier_ldsx/LDSX, S8 range checking, privileged:OK
#331/8   verifier_ldsx/LDSX, S16 range checking:OK
#331/9   verifier_ldsx/LDSX, S16 range checking @unpriv:OK
#331/10  verifier_ldsx/LDSX, S32 range checking:OK
#331/11  verifier_ldsx/LDSX, S32 range checking @unpriv:OK
#331     verifier_ldsx:OK
#342/1   verifier_movsx/MOV32SX, S8:OK
#342/2   verifier_movsx/MOV32SX, S8 @unpriv:OK
#342/3   verifier_movsx/MOV32SX, S16:OK
#342/4   verifier_movsx/MOV32SX, S16 @unpriv:OK
#342/5   verifier_movsx/MOV64SX, S8:OK
#342/6   verifier_movsx/MOV64SX, S8 @unpriv:OK
#342/7   verifier_movsx/MOV64SX, S16:OK
#342/8   verifier_movsx/MOV64SX, S16 @unpriv:OK
#342/9   verifier_movsx/MOV64SX, S32:OK
#342/10  verifier_movsx/MOV64SX, S32 @unpriv:OK
#342/11  verifier_movsx/MOV32SX, S8, range_check:OK
#342/12  verifier_movsx/MOV32SX, S8, range_check @unpriv:OK
#342/13  verifier_movsx/MOV32SX, S16, range_check:OK
#342/14  verifier_movsx/MOV32SX, S16, range_check @unpriv:OK
#342/15  verifier_movsx/MOV32SX, S16, range_check 2:OK
#342/16  verifier_movsx/MOV32SX, S16, range_check 2 @unpriv:OK
#342/17  verifier_movsx/MOV64SX, S8, range_check:OK
#342/18  verifier_movsx/MOV64SX, S8, range_check @unpriv:OK
#342/19  verifier_movsx/MOV64SX, S16, range_check:OK
#342/20  verifier_movsx/MOV64SX, S16, range_check @unpriv:OK
#342/21  verifier_movsx/MOV64SX, S32, range_check:OK
#342/22  verifier_movsx/MOV64SX, S32, range_check @unpriv:OK
#342/23  verifier_movsx/MOV64SX, S16, R10 Sign Extension:OK
#342/24  verifier_movsx/MOV64SX, S16, R10 Sign Extension @unpriv:OK
#342     verifier_movsx:OK
#354/1   verifier_sdiv/SDIV32, non-zero imm divisor, check 1:OK
#354/2   verifier_sdiv/SDIV32, non-zero imm divisor, check 1 @unpriv:OK
#354/3   verifier_sdiv/SDIV32, non-zero imm divisor, check 2:OK
#354/4   verifier_sdiv/SDIV32, non-zero imm divisor, check 2 @unpriv:OK
#354/5   verifier_sdiv/SDIV32, non-zero imm divisor, check 3:OK
#354/6   verifier_sdiv/SDIV32, non-zero imm divisor, check 3 @unpriv:OK
#354/7   verifier_sdiv/SDIV32, non-zero imm divisor, check 4:OK
#354/8   verifier_sdiv/SDIV32, non-zero imm divisor, check 4 @unpriv:OK
#354/9   verifier_sdiv/SDIV32, non-zero imm divisor, check 5:OK
#354/10  verifier_sdiv/SDIV32, non-zero imm divisor, check 5 @unpriv:OK
#354/11  verifier_sdiv/SDIV32, non-zero imm divisor, check 6:OK
#354/12  verifier_sdiv/SDIV32, non-zero imm divisor, check 6 @unpriv:OK
#354/13  verifier_sdiv/SDIV32, non-zero imm divisor, check 7:OK
#354/14  verifier_sdiv/SDIV32, non-zero imm divisor, check 7 @unpriv:OK
#354/15  verifier_sdiv/SDIV32, non-zero imm divisor, check 8:OK
#354/16  verifier_sdiv/SDIV32, non-zero imm divisor, check 8 @unpriv:OK
#354/17  verifier_sdiv/SDIV32, non-zero reg divisor, check 1:OK
#354/18  verifier_sdiv/SDIV32, non-zero reg divisor, check 1 @unpriv:OK
#354/19  verifier_sdiv/SDIV32, non-zero reg divisor, check 2:OK
#354/20  verifier_sdiv/SDIV32, non-zero reg divisor, check 2 @unpriv:OK
#354/21  verifier_sdiv/SDIV32, non-zero reg divisor, check 3:OK
#354/22  verifier_sdiv/SDIV32, non-zero reg divisor, check 3 @unpriv:OK
#354/23  verifier_sdiv/SDIV32, non-zero reg divisor, check 4:OK
#354/24  verifier_sdiv/SDIV32, non-zero reg divisor, check 4 @unpriv:OK
#354/25  verifier_sdiv/SDIV32, non-zero reg divisor, check 5:OK
#354/26  verifier_sdiv/SDIV32, non-zero reg divisor, check 5 @unpriv:OK
#354/27  verifier_sdiv/SDIV32, non-zero reg divisor, check 6:OK
#354/28  verifier_sdiv/SDIV32, non-zero reg divisor, check 6 @unpriv:OK
#354/29  verifier_sdiv/SDIV32, non-zero reg divisor, check 7:OK
#354/30  verifier_sdiv/SDIV32, non-zero reg divisor, check 7 @unpriv:OK
#354/31  verifier_sdiv/SDIV32, non-zero reg divisor, check 8:OK
#354/32  verifier_sdiv/SDIV32, non-zero reg divisor, check 8 @unpriv:OK
#354/33  verifier_sdiv/SDIV64, non-zero imm divisor, check 1:OK
#354/34  verifier_sdiv/SDIV64, non-zero imm divisor, check 1 @unpriv:OK
#354/35  verifier_sdiv/SDIV64, non-zero imm divisor, check 2:OK
#354/36  verifier_sdiv/SDIV64, non-zero imm divisor, check 2 @unpriv:OK
#354/37  verifier_sdiv/SDIV64, non-zero imm divisor, check 3:OK
#354/38  verifier_sdiv/SDIV64, non-zero imm divisor, check 3 @unpriv:OK
#354/39  verifier_sdiv/SDIV64, non-zero imm divisor, check 4:OK
#354/40  verifier_sdiv/SDIV64, non-zero imm divisor, check 4 @unpriv:OK
#354/41  verifier_sdiv/SDIV64, non-zero imm divisor, check 5:OK
#354/42  verifier_sdiv/SDIV64, non-zero imm divisor, check 5 @unpriv:OK
#354/43  verifier_sdiv/SDIV64, non-zero imm divisor, check 6:OK
#354/44  verifier_sdiv/SDIV64, non-zero imm divisor, check 6 @unpriv:OK
#354/45  verifier_sdiv/SDIV64, non-zero reg divisor, check 1:OK
#354/46  verifier_sdiv/SDIV64, non-zero reg divisor, check 1 @unpriv:OK
#354/47  verifier_sdiv/SDIV64, non-zero reg divisor, check 2:OK
#354/48  verifier_sdiv/SDIV64, non-zero reg divisor, check 2 @unpriv:OK
#354/49  verifier_sdiv/SDIV64, non-zero reg divisor, check 3:OK
#354/50  verifier_sdiv/SDIV64, non-zero reg divisor, check 3 @unpriv:OK
#354/51  verifier_sdiv/SDIV64, non-zero reg divisor, check 4:OK
#354/52  verifier_sdiv/SDIV64, non-zero reg divisor, check 4 @unpriv:OK
#354/53  verifier_sdiv/SDIV64, non-zero reg divisor, check 5:OK
#354/54  verifier_sdiv/SDIV64, non-zero reg divisor, check 5 @unpriv:OK
#354/55  verifier_sdiv/SDIV64, non-zero reg divisor, check 6:OK
#354/56  verifier_sdiv/SDIV64, non-zero reg divisor, check 6 @unpriv:OK
#354/57  verifier_sdiv/SMOD32, non-zero imm divisor, check 1:OK
#354/58  verifier_sdiv/SMOD32, non-zero imm divisor, check 1 @unpriv:OK
#354/59  verifier_sdiv/SMOD32, non-zero imm divisor, check 2:OK
#354/60  verifier_sdiv/SMOD32, non-zero imm divisor, check 2 @unpriv:OK
#354/61  verifier_sdiv/SMOD32, non-zero imm divisor, check 3:OK
#354/62  verifier_sdiv/SMOD32, non-zero imm divisor, check 3 @unpriv:OK
#354/63  verifier_sdiv/SMOD32, non-zero imm divisor, check 4:OK
#354/64  verifier_sdiv/SMOD32, non-zero imm divisor, check 4 @unpriv:OK
#354/65  verifier_sdiv/SMOD32, non-zero imm divisor, check 5:OK
#354/66  verifier_sdiv/SMOD32, non-zero imm divisor, check 5 @unpriv:OK
#354/67  verifier_sdiv/SMOD32, non-zero imm divisor, check 6:OK
#354/68  verifier_sdiv/SMOD32, non-zero imm divisor, check 6 @unpriv:OK
#354/69  verifier_sdiv/SMOD32, non-zero reg divisor, check 1:OK
#354/70  verifier_sdiv/SMOD32, non-zero reg divisor, check 1 @unpriv:OK
#354/71  verifier_sdiv/SMOD32, non-zero reg divisor, check 2:OK
#354/72  verifier_sdiv/SMOD32, non-zero reg divisor, check 2 @unpriv:OK
#354/73  verifier_sdiv/SMOD32, non-zero reg divisor, check 3:OK
#354/74  verifier_sdiv/SMOD32, non-zero reg divisor, check 3 @unpriv:OK
#354/75  verifier_sdiv/SMOD32, non-zero reg divisor, check 4:OK
#354/76  verifier_sdiv/SMOD32, non-zero reg divisor, check 4 @unpriv:OK
#354/77  verifier_sdiv/SMOD32, non-zero reg divisor, check 5:OK
#354/78  verifier_sdiv/SMOD32, non-zero reg divisor, check 5 @unpriv:OK
#354/79  verifier_sdiv/SMOD32, non-zero reg divisor, check 6:OK
#354/80  verifier_sdiv/SMOD32, non-zero reg divisor, check 6 @unpriv:OK
#354/81  verifier_sdiv/SMOD64, non-zero imm divisor, check 1:OK
#354/82  verifier_sdiv/SMOD64, non-zero imm divisor, check 1 @unpriv:OK
#354/83  verifier_sdiv/SMOD64, non-zero imm divisor, check 2:OK
#354/84  verifier_sdiv/SMOD64, non-zero imm divisor, check 2 @unpriv:OK
#354/85  verifier_sdiv/SMOD64, non-zero imm divisor, check 3:OK
#354/86  verifier_sdiv/SMOD64, non-zero imm divisor, check 3 @unpriv:OK
#354/87  verifier_sdiv/SMOD64, non-zero imm divisor, check 4:OK
#354/88  verifier_sdiv/SMOD64, non-zero imm divisor, check 4 @unpriv:OK
#354/89  verifier_sdiv/SMOD64, non-zero imm divisor, check 5:OK
#354/90  verifier_sdiv/SMOD64, non-zero imm divisor, check 5 @unpriv:OK
#354/91  verifier_sdiv/SMOD64, non-zero imm divisor, check 6:OK
#354/92  verifier_sdiv/SMOD64, non-zero imm divisor, check 6 @unpriv:OK
#354/93  verifier_sdiv/SMOD64, non-zero imm divisor, check 7:OK
#354/94  verifier_sdiv/SMOD64, non-zero imm divisor, check 7 @unpriv:OK
#354/95  verifier_sdiv/SMOD64, non-zero imm divisor, check 8:OK
#354/96  verifier_sdiv/SMOD64, non-zero imm divisor, check 8 @unpriv:OK
#354/97  verifier_sdiv/SMOD64, non-zero reg divisor, check 1:OK
#354/98  verifier_sdiv/SMOD64, non-zero reg divisor, check 1 @unpriv:OK
#354/99  verifier_sdiv/SMOD64, non-zero reg divisor, check 2:OK
#354/100 verifier_sdiv/SMOD64, non-zero reg divisor, check 2 @unpriv:OK
#354/101 verifier_sdiv/SMOD64, non-zero reg divisor, check 3:OK
#354/102 verifier_sdiv/SMOD64, non-zero reg divisor, check 3 @unpriv:OK
#354/103 verifier_sdiv/SMOD64, non-zero reg divisor, check 4:OK
#354/104 verifier_sdiv/SMOD64, non-zero reg divisor, check 4 @unpriv:OK
#354/105 verifier_sdiv/SMOD64, non-zero reg divisor, check 5:OK
#354/106 verifier_sdiv/SMOD64, non-zero reg divisor, check 5 @unpriv:OK
#354/107 verifier_sdiv/SMOD64, non-zero reg divisor, check 6:OK
#354/108 verifier_sdiv/SMOD64, non-zero reg divisor, check 6 @unpriv:OK
#354/109 verifier_sdiv/SMOD64, non-zero reg divisor, check 7:OK
#354/110 verifier_sdiv/SMOD64, non-zero reg divisor, check 7 @unpriv:OK
#354/111 verifier_sdiv/SMOD64, non-zero reg divisor, check 8:OK
#354/112 verifier_sdiv/SMOD64, non-zero reg divisor, check 8 @unpriv:OK
#354/113 verifier_sdiv/SDIV32, zero divisor:OK
#354/114 verifier_sdiv/SDIV32, zero divisor @unpriv:OK
#354/115 verifier_sdiv/SDIV64, zero divisor:OK
#354/116 verifier_sdiv/SDIV64, zero divisor @unpriv:OK
#354/117 verifier_sdiv/SMOD32, zero divisor:OK
#354/118 verifier_sdiv/SMOD32, zero divisor @unpriv:OK
#354/119 verifier_sdiv/SMOD64, zero divisor:OK
#354/120 verifier_sdiv/SMOD64, zero divisor @unpriv:OK
#354     verifier_sdiv:OK
Summary: 6/166 PASSED, 0 SKIPPED, 0 FAILED

NOTE: ldsx_insn testcase uses fentry and needs to rely on ftrace direct call [0].
[0] https://lore.kernel.org/all/20230627111612.761164-1-suagrfillet@gmail.com/

Pu Lehui (7):
  riscv, bpf: Fix missing exception handling and redundant zext for
    LDX_B/H/W
  riscv, bpf: Support sign-extension load insns
  riscv, bpf: Support sign-extension mov insns
  riscv, bpf: Support 32-bit offset jmp insn
  riscv, bpf: Support signed div/mod insns
  riscv, bpf: Support unconditional bswap insn
  selftests/bpf: Enable cpu v4 tests for RV64

 arch/riscv/net/bpf_jit.h                      |  30 ++++++
 arch/riscv/net/bpf_jit_comp64.c               | 102 ++++++++++++++----
 .../selftests/bpf/progs/test_ldsx_insn.c      |   3 +-
 .../selftests/bpf/progs/verifier_bswap.c      |   3 +-
 .../selftests/bpf/progs/verifier_gotol.c      |   3 +-
 .../selftests/bpf/progs/verifier_ldsx.c       |   3 +-
 .../selftests/bpf/progs/verifier_movsx.c      |   3 +-
 .../selftests/bpf/progs/verifier_sdiv.c       |   3 +-
 8 files changed, 122 insertions(+), 28 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2023-08-24  1:23 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-23 23:10 [PATCH bpf-next 0/7] Add support cpu v4 insns for RV64 Pu Lehui
2023-08-23 23:10 ` [PATCH bpf-next 1/7] riscv, bpf: Fix missing exception handling and redundant zext for LDX_B/H/W Pu Lehui
2023-08-23 23:10 ` [PATCH bpf-next 2/7] riscv, bpf: Support sign-extension load insns Pu Lehui
2023-08-23 18:15   ` Björn Töpel
2023-08-23 18:17   ` Björn Töpel
2023-08-23 23:10 ` [PATCH bpf-next 3/7] riscv, bpf: Support sign-extension mov insns Pu Lehui
2023-08-23 18:14   ` Björn Töpel
2023-08-23 18:27     ` Björn Töpel
2023-08-24  1:17     ` Pu Lehui
2023-08-23 23:10 ` [PATCH bpf-next 4/7] riscv, bpf: Support 32-bit offset jmp insn Pu Lehui
2023-08-23 18:22   ` Björn Töpel
2023-08-23 23:10 ` [PATCH bpf-next 5/7] riscv, bpf: Support signed div/mod insns Pu Lehui
2023-08-23 18:23   ` Björn Töpel
2023-08-23 23:10 ` [PATCH bpf-next 6/7] riscv, bpf: Support unconditional bswap insn Pu Lehui
2023-08-23 18:24   ` Björn Töpel
2023-08-23 23:10 ` [PATCH bpf-next 7/7] selftests/bpf: Enable cpu v4 tests for RV64 Pu Lehui
2023-08-23 17:34   ` Yonghong Song
2023-08-23 18:25   ` Björn Töpel
2023-08-23 18:28     ` Alexei Starovoitov
2023-08-23 19:50       ` Björn Töpel
2023-08-24  1:23         ` Pu Lehui

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox