[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <c4bf63161e13ce1b51a288b1fd0f3fb0b1170f22.camel@kernel.org>
Date: Sun, 27 Jul 2025 09:00:43 +0800
From: Geliang Tang <geliang@...nel.org>
To: Chenghao Duan <duanchenghao@...inos.cn>, ast@...nel.org,
daniel@...earbox.net, andrii@...nel.org, yangtiezhu@...ngson.cn,
hengqi.chen@...il.com, chenhuacai@...nel.org
Cc: martin.lau@...ux.dev, eddyz87@...il.com, song@...nel.org,
yonghong.song@...ux.dev, john.fastabend@...il.com, kpsingh@...nel.org,
sdf@...ichev.me, haoluo@...gle.com, jolsa@...nel.org, kernel@...0n.name,
linux-kernel@...r.kernel.org, loongarch@...ts.linux.dev,
bpf@...r.kernel.org, guodongtai@...inos.cn, youling.tang@...ux.dev,
jianghaoran@...inos.cn, vincent.mc.li@...il.com
Subject: Re: [PATCH v4 0/5] Support trampoline for LoongArch
Hi Chenghao, Huacai, Tuezhu,
I first discovered this Loongarch BPF trampoline issue when debugging
MPTCP BPF selftests on a Loongarch machine last June (see my commit
eef0532e900c "selftests/bpf: Null checks for links in bpf_tcp_ca"), and
reported it to Huachui. Tiezhu and I started implementing BPF
trampoline last June. I also called on more Chinese kernel engineers to
participate in the development of the Loongarch BPF trampoline at the
openEuler Developer Day 2024 and CLSF 2024 conferences. Although this
work was finally handed over to Chenghao, it is also necessary to
mention me as the reporter and our early developers in the commit log.
Thanks,
-Geliang
On Thu, 2025-07-24 at 22:19 +0800, Chenghao Duan wrote:
> v4:
> 1. Delete the #3 patch of version V3.
>
> 2. Add 5 NOP instructions in build_prologue().
> Reserve space for the move_imm + jirl instruction.
>
> 3. Differentiate between direct jumps and ftrace jumps of trampoline:
> direct jumps skip 5 instructions.
> ftrace jumps skip 2 instructions.
>
> 4. Remove the generation of BL jump instructions in
> emit_jump_and_link().
> After the trampoline ends, it will jump to the specified register.
> The BL instruction writes PC+4 to r1 instead of allowing the
> specification of rd.
>
> ---------------------------------------------------------------------
> --
> Historical Version:
> v3:
> 1. Patch 0003 adds EXECMEM_BPF memory type to the execmem subsystem.
>
> 2. Align the size calculated by arch_bpf_trampoline_size to page
> boundaries.
>
> 3. Add the flush icache operation to larch_insn_text_copy.
>
> 4. Unify the implementation of bpf_arch_xxx into the patch
> "0004-LoongArch-BPF-Add-bpf_arch_xxxxx-support-for-Loong.patch".
>
> 5. Change the patch order. Move the patch
> "0002-LoongArch-BPF-Update-the-code-to-rename-validate_.patch" before
> "0005-LoongArch-BPF-Add-bpf-trampoline-support-for-Loon.patch".
>
> URL for version v3:
> https://lore.kernel.org/all/20250709055029.723243-1-duanchenghao@kylinos.cn/
> ---------
> v2:
> 1. Change the fixmap in the instruction copy function to
> set_memory_xxx.
>
> 2. Change the implementation method of the following code.
> - arch_alloc_bpf_trampoline
> - arch_free_bpf_trampoline
> Use the BPF core's allocation and free functions.
>
> - bpf_arch_text_invalidate
> Operate with the function larch_insn_text_copy that carries
> memory attribute modifications.
>
> 3. Correct the incorrect code formatting.
>
> URL for version v2:
> https://lore.kernel.org/all/20250618105048.1510560-1-duanchenghao@kylinos.cn/
> ---------
> v1:
> Support trampoline for LoongArch. The following feature tests have
> been
> completed:
> 1. fentry
> 2. fexit
> 3. fmod_ret
>
> TODO: The support for the struct_ops feature will be provided in
> subsequent patches.
>
> URL for version v1:
> https://lore.kernel.org/all/20250611035952.111182-1-duanchenghao@kylinos.cn/
> ---------------------------------------------------------------------
> --
>
> Chenghao Duan (4):
> LoongArch: Add larch_insn_gen_{beq,bne} helpers
> LoongArch: BPF: Update the code to rename validate_code to
> validate_ctx
> LoongArch: BPF: Add bpf_arch_xxxxx support for Loongarch
> LoongArch: BPF: Add bpf trampoline support for Loongarch
>
> Tiezhu Yang (1):
> LoongArch: BPF: Add struct ops support for trampoline
>
> arch/loongarch/include/asm/inst.h | 3 +
> arch/loongarch/kernel/inst.c | 60 ++++
> arch/loongarch/net/bpf_jit.c | 521
> +++++++++++++++++++++++++++++-
> arch/loongarch/net/bpf_jit.h | 6 +
> 4 files changed, 589 insertions(+), 1 deletion(-)
Powered by blists - more mailing lists