mbox series

[bpf-next,v3,0/4] Add BPF JIT support for LoongArch

Message ID 1661999249-10258-1-git-send-email-yangtiezhu@loongson.cn (mailing list archive)
Headers show
Series Add BPF JIT support for LoongArch | expand

Message

Tiezhu Yang Sept. 1, 2022, 2:27 a.m. UTC
The basic support for LoongArch has been merged into the upstream Linux
kernel since 5.19-rc1 on June 5, 2022, this patch series adds BPF JIT
support for LoongArch.

Here is the LoongArch documention:
https://www.kernel.org/doc/html/latest/loongarch/index.html

With this patch series, the test cases in lib/test_bpf.ko have passed
on LoongArch.

  # echo 1 > /proc/sys/net/core/bpf_jit_enable
  # modprobe test_bpf
  # dmesg | grep Summary
  test_bpf: Summary: 1026 PASSED, 0 FAILED, [1014/1014 JIT'ed]
  test_bpf: test_tail_calls: Summary: 10 PASSED, 0 FAILED, [10/10 JIT'ed]
  test_bpf: test_skb_segment: Summary: 2 PASSED, 0 FAILED

It seems that this patch series can not be applied cleanly to bpf-next
which is not synced to v6.0-rc3.

v3:
  -- Remove CONFIG_TEST_BPF in loongson3_defconfig

v2:
  -- Rebased series on v6.0-rc3
  -- Make build_epilogue() static
  -- Use alsl.d, bstrpick.d, [ld/st]ptr.[w/d] to save some instructions
  -- Replace move_imm32() and move_imm64() with move_imm() and optimize it
  -- Add code comments to explain the considerations of conditional jump
  https://lore.kernel.org/bpf/1661857809-10828-1-git-send-email-yangtiezhu@loongson.cn/

v1:
  -- Rebased series on v6.0-rc1
  -- Move {signed,unsigned}_imm_check() to inst.h
  -- Define the imm field as "unsigned int" in the instruction format
  -- Use DEF_EMIT_*_FORMAT to define the same kind of instructions
  -- Use "stack_adjust += sizeof(long) * 8" in build_prologue()
  https://lore.kernel.org/bpf/1660996260-11337-1-git-send-email-yangtiezhu@loongson.cn/

RFC:
  https://lore.kernel.org/bpf/1660013580-19053-1-git-send-email-yangtiezhu@loongson.cn/

Tiezhu Yang (4):
  LoongArch: Move {signed,unsigned}_imm_check() to inst.h
  LoongArch: Add some instruction opcodes and formats
  LoongArch: Add BPF JIT support
  LoongArch: Enable BPF_JIT in default config

 arch/loongarch/Kbuild                      |    1 +
 arch/loongarch/Kconfig                     |    1 +
 arch/loongarch/configs/loongson3_defconfig |    1 +
 arch/loongarch/include/asm/inst.h          |  383 ++++++++-
 arch/loongarch/kernel/module.c             |   10 -
 arch/loongarch/net/Makefile                |    7 +
 arch/loongarch/net/bpf_jit.c               | 1160 ++++++++++++++++++++++++++++
 arch/loongarch/net/bpf_jit.h               |  282 +++++++
 8 files changed, 1830 insertions(+), 15 deletions(-)
 create mode 100644 arch/loongarch/net/Makefile
 create mode 100644 arch/loongarch/net/bpf_jit.c
 create mode 100644 arch/loongarch/net/bpf_jit.h

Comments

Daniel Borkmann Sept. 2, 2022, 1:34 p.m. UTC | #1
On 9/1/22 4:27 AM, Tiezhu Yang wrote:
> The basic support for LoongArch has been merged into the upstream Linux
> kernel since 5.19-rc1 on June 5, 2022, this patch series adds BPF JIT
> support for LoongArch.
> 
> Here is the LoongArch documention:
> https://www.kernel.org/doc/html/latest/loongarch/index.html
> 
> With this patch series, the test cases in lib/test_bpf.ko have passed
> on LoongArch.
> 
>    # echo 1 > /proc/sys/net/core/bpf_jit_enable
>    # modprobe test_bpf
>    # dmesg | grep Summary
>    test_bpf: Summary: 1026 PASSED, 0 FAILED, [1014/1014 JIT'ed]
>    test_bpf: test_tail_calls: Summary: 10 PASSED, 0 FAILED, [10/10 JIT'ed]
>    test_bpf: test_skb_segment: Summary: 2 PASSED, 0 FAILED
> 
> It seems that this patch series can not be applied cleanly to bpf-next
> which is not synced to v6.0-rc3.

For bpf-next tree this doesn't apply cleanly. Huacai, probably easier if you
take it in. Otherwise this needs rebase (and your Ack as arch maintainer), but
then there'll be merge conflict later anyway.

[...]
Applying: LoongArch: Move {signed,unsigned}_imm_check() to inst.h
Applying: LoongArch: Add some instruction opcodes and formats
error: patch failed: arch/loongarch/include/asm/inst.h:18
error: arch/loongarch/include/asm/inst.h: patch does not apply
Patch failed at 0002 LoongArch: Add some instruction opcodes and formats
[...]

Thanks,
Daniel

> v3:
>    -- Remove CONFIG_TEST_BPF in loongson3_defconfig
> 
> v2:
>    -- Rebased series on v6.0-rc3
>    -- Make build_epilogue() static
>    -- Use alsl.d, bstrpick.d, [ld/st]ptr.[w/d] to save some instructions
>    -- Replace move_imm32() and move_imm64() with move_imm() and optimize it
>    -- Add code comments to explain the considerations of conditional jump
>    https://lore.kernel.org/bpf/1661857809-10828-1-git-send-email-yangtiezhu@loongson.cn/
> 
> v1:
>    -- Rebased series on v6.0-rc1
>    -- Move {signed,unsigned}_imm_check() to inst.h
>    -- Define the imm field as "unsigned int" in the instruction format
>    -- Use DEF_EMIT_*_FORMAT to define the same kind of instructions
>    -- Use "stack_adjust += sizeof(long) * 8" in build_prologue()
>    https://lore.kernel.org/bpf/1660996260-11337-1-git-send-email-yangtiezhu@loongson.cn/
> 
> RFC:
>    https://lore.kernel.org/bpf/1660013580-19053-1-git-send-email-yangtiezhu@loongson.cn/
> 
> Tiezhu Yang (4):
>    LoongArch: Move {signed,unsigned}_imm_check() to inst.h
>    LoongArch: Add some instruction opcodes and formats
>    LoongArch: Add BPF JIT support
>    LoongArch: Enable BPF_JIT in default config
> 
>   arch/loongarch/Kbuild                      |    1 +
>   arch/loongarch/Kconfig                     |    1 +
>   arch/loongarch/configs/loongson3_defconfig |    1 +
>   arch/loongarch/include/asm/inst.h          |  383 ++++++++-
>   arch/loongarch/kernel/module.c             |   10 -
>   arch/loongarch/net/Makefile                |    7 +
>   arch/loongarch/net/bpf_jit.c               | 1160 ++++++++++++++++++++++++++++
>   arch/loongarch/net/bpf_jit.h               |  282 +++++++
>   8 files changed, 1830 insertions(+), 15 deletions(-)
>   create mode 100644 arch/loongarch/net/Makefile
>   create mode 100644 arch/loongarch/net/bpf_jit.c
>   create mode 100644 arch/loongarch/net/bpf_jit.h
>
Huacai Chen Sept. 3, 2022, 7:12 a.m. UTC | #2
Hi, Daniel,

On Fri, Sep 2, 2022 at 9:34 PM Daniel Borkmann <daniel@iogearbox.net> wrote:
>
> On 9/1/22 4:27 AM, Tiezhu Yang wrote:
> > The basic support for LoongArch has been merged into the upstream Linux
> > kernel since 5.19-rc1 on June 5, 2022, this patch series adds BPF JIT
> > support for LoongArch.
> >
> > Here is the LoongArch documention:
> > https://www.kernel.org/doc/html/latest/loongarch/index.html
> >
> > With this patch series, the test cases in lib/test_bpf.ko have passed
> > on LoongArch.
> >
> >    # echo 1 > /proc/sys/net/core/bpf_jit_enable
> >    # modprobe test_bpf
> >    # dmesg | grep Summary
> >    test_bpf: Summary: 1026 PASSED, 0 FAILED, [1014/1014 JIT'ed]
> >    test_bpf: test_tail_calls: Summary: 10 PASSED, 0 FAILED, [10/10 JIT'ed]
> >    test_bpf: test_skb_segment: Summary: 2 PASSED, 0 FAILED
> >
> > It seems that this patch series can not be applied cleanly to bpf-next
> > which is not synced to v6.0-rc3.
>
> For bpf-next tree this doesn't apply cleanly. Huacai, probably easier if you
> take it in. Otherwise this needs rebase (and your Ack as arch maintainer), but
> then there'll be merge conflict later anyway.
This series can be cleanly applied on loongarch-next. So if this
series is good to you, please give an Acked-by, and I will apply them
to loongarch-next, thanks.

Huacai

>
> [...]
> Applying: LoongArch: Move {signed,unsigned}_imm_check() to inst.h
> Applying: LoongArch: Add some instruction opcodes and formats
> error: patch failed: arch/loongarch/include/asm/inst.h:18
> error: arch/loongarch/include/asm/inst.h: patch does not apply
> Patch failed at 0002 LoongArch: Add some instruction opcodes and formats
> [...]
>
> Thanks,
> Daniel
>
> > v3:
> >    -- Remove CONFIG_TEST_BPF in loongson3_defconfig
> >
> > v2:
> >    -- Rebased series on v6.0-rc3
> >    -- Make build_epilogue() static
> >    -- Use alsl.d, bstrpick.d, [ld/st]ptr.[w/d] to save some instructions
> >    -- Replace move_imm32() and move_imm64() with move_imm() and optimize it
> >    -- Add code comments to explain the considerations of conditional jump
> >    https://lore.kernel.org/bpf/1661857809-10828-1-git-send-email-yangtiezhu@loongson.cn/
> >
> > v1:
> >    -- Rebased series on v6.0-rc1
> >    -- Move {signed,unsigned}_imm_check() to inst.h
> >    -- Define the imm field as "unsigned int" in the instruction format
> >    -- Use DEF_EMIT_*_FORMAT to define the same kind of instructions
> >    -- Use "stack_adjust += sizeof(long) * 8" in build_prologue()
> >    https://lore.kernel.org/bpf/1660996260-11337-1-git-send-email-yangtiezhu@loongson.cn/
> >
> > RFC:
> >    https://lore.kernel.org/bpf/1660013580-19053-1-git-send-email-yangtiezhu@loongson.cn/
> >
> > Tiezhu Yang (4):
> >    LoongArch: Move {signed,unsigned}_imm_check() to inst.h
> >    LoongArch: Add some instruction opcodes and formats
> >    LoongArch: Add BPF JIT support
> >    LoongArch: Enable BPF_JIT in default config
> >
> >   arch/loongarch/Kbuild                      |    1 +
> >   arch/loongarch/Kconfig                     |    1 +
> >   arch/loongarch/configs/loongson3_defconfig |    1 +
> >   arch/loongarch/include/asm/inst.h          |  383 ++++++++-
> >   arch/loongarch/kernel/module.c             |   10 -
> >   arch/loongarch/net/Makefile                |    7 +
> >   arch/loongarch/net/bpf_jit.c               | 1160 ++++++++++++++++++++++++++++
> >   arch/loongarch/net/bpf_jit.h               |  282 +++++++
> >   8 files changed, 1830 insertions(+), 15 deletions(-)
> >   create mode 100644 arch/loongarch/net/Makefile
> >   create mode 100644 arch/loongarch/net/bpf_jit.c
> >   create mode 100644 arch/loongarch/net/bpf_jit.h
> >
>