Re: [PATCH v4 4/8] LoongArch: BPF: No text_poke() for kernel text

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 3, 2025 at 10:52 PM Huacai Chen <chenhuacai@xxxxxxxxxx> wrote:
>
> Hi, Hengqi,
>
> On Wed, Sep 3, 2025 at 8:06 PM Hengqi Chen <hengqi.chen@xxxxxxxxx> wrote:
> >
> > The current implementation of bpf_arch_text_poke() requires 5 nops
> > at patch site which is not applicable for kernel/module functions.
> > With CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y, this can be done
> > by ftrace instead.
> Does this mean BPF trampoline can only work with FTRACE enabled?
>

IIUC, with CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=n, we could still trace
BPF progs with BPF trampoline.

> Huacai
>
> >
> > See the following commit for details:
> >   * commit b91e014f078e ("bpf: Make BPF trampoline use register_ftrace_direct() API")
> >   * commit 9cdc3b6a299c ("LoongArch: ftrace: Add direct call support")
> >
> > Signed-off-by: Hengqi Chen <hengqi.chen@xxxxxxxxx>
> > ---
> >  arch/loongarch/net/bpf_jit.c | 7 +++++--
> >  1 file changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/loongarch/net/bpf_jit.c b/arch/loongarch/net/bpf_jit.c
> > index 7b7e449b9ea9..35b13d91a979 100644
> > --- a/arch/loongarch/net/bpf_jit.c
> > +++ b/arch/loongarch/net/bpf_jit.c
> > @@ -1294,8 +1294,11 @@ int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type poke_type,
> >         u32 old_insns[LOONGARCH_LONG_JUMP_NINSNS] = {[0 ... 4] = INSN_NOP};
> >         u32 new_insns[LOONGARCH_LONG_JUMP_NINSNS] = {[0 ... 4] = INSN_NOP};
> >
> > -       if (!is_kernel_text((unsigned long)ip) &&
> > -               !is_bpf_text_address((unsigned long)ip))
> > +       if (!is_bpf_text_address((unsigned long)ip))
> > +               /* Only poking bpf text is supported. Since kernel function
> > +                * entry is set up by ftrace, we reply on ftrace to poke kernel
> > +                * functions.
> > +                */
> >                 return -ENOTSUPP;
> >
> >         ret = emit_jump_or_nops(old_addr, ip, old_insns, is_call);
> > --
> > 2.43.5
> >





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux