Subject: Re: [bpf-next 1/6] bpf,powerpc: Introduce bpf_jit_emit_probe_mem_store() to emit store instructions

From: Saket Kumar Bhaskar <[email-masked]>
Date: Thu, 7 Aug 2025 15:59:15 +0530

On Wed, Aug 06, 2025 at 08:59:59AM +0200, Christophe Leroy wrote:
> 
> 
> Le 05/08/2025 à 13:59, Venkat Rao Bagalkote a écrit :
> > 
> > On 05/08/25 1:04 pm, Christophe Leroy wrote:
> > > 
> > > 
> > > Le 05/08/2025 à 08:27, Saket Kumar Bhaskar a écrit :
> > > > bpf_jit_emit_probe_mem_store() is introduced to emit instructions for
> > > > storing memory values depending on the size (byte, halfword,
> > > > word, doubleword).
> > > 
> > > Build break with this patch
> > > 
> > >   CC      arch/powerpc/net/bpf_jit_comp64.o
> > > arch/powerpc/net/bpf_jit_comp64.c:395:12: error:
> > > 'bpf_jit_emit_probe_mem_store' defined but not used [-Werror=unused-
> > > function]
> > >  static int bpf_jit_emit_probe_mem_store(struct codegen_context
> > > *ctx, u32 src_reg, s16 off,
> > >             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > > cc1: all warnings being treated as errors
> > > make[4]: *** [scripts/Makefile.build:287: arch/powerpc/net/
> > > bpf_jit_comp64.o] Error 1
> > > 
> > I tried this on top of bpf-next, and for me build passed.
> 
> Build of _this_ patch (alone) passed ?
> 
> This patch defines a static function but doesn't use it, so the build must
> breaks because of that, unless you have set CONFIG_PPC_DISABLE_WERROR.
> 
> Following patch starts using this function so then the build doesn't break
> anymore. But until next patch is applied the build doesn't work. Both
> patches have to be squashed together in order to not break bisectability of
> the kernel.
> 
> Christophe
> 
Got it Chris, will squash both the patches together in v2.
> > 
> > Note: I applied https://eur01.safelinks.protection.outlook.com/?
> > url=https%3A%2F%2Flore.kernel.org%2Fbpf%2F20250717202935.29018-2- puranjay%40kernel.org%2F&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C0468473019834e07ef2b08ddd4179b9c%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638899920058624267%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=iZLg9NUWxtH3vO1STI8wRYLzwvhohd2KKTAGYDe3WnM%3D&reserved=0
> > before applying current patch.
> > 
> > gcc version 14.2.1 20250110
> > 
> > uname -r: 6.16.0-gf2844c7fdb07
> > 
> > bpf-next repo: https://eur01.safelinks.protection.outlook.com/? url=https%3A%2F%2Fkernel.googlesource.com%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgit%2Fbpf%2Fbpf-next&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C0468473019834e07ef2b08ddd4179b9c%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638899920058644309%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=OrMauttrzPbaFYhzKdkH5l%2FltISc95MwitnUC7YLhJQ%3D&reserved=0
> > 
> > HEAD:
> > 
> > commit f3af62b6cee8af9f07012051874af2d2a451f0e5 (origin/master, origin/
> > HEAD)
> > Author: Tao Chen <[email-masked]>
> > Date:   Wed Jul 23 22:44:42 2025 +0800
> > 
> >      bpftool: Add bash completion for token argument
> > 
> > 
> > Build Success logs:
> > 
> >    TEST-OBJ [test_progs-cpuv4] xdp_vlan.test.o
> >    TEST-OBJ [test_progs-cpuv4] xdpwall.test.o
> >    TEST-OBJ [test_progs-cpuv4] xfrm_info.test.o
> >    BINARY   bench
> >    BINARY   test_maps
> >    BINARY   test_progs
> >    BINARY   test_progs-no_alu32
> >    BINARY   test_progs-cpuv4
> > 
> > 
> > Regards,
> > 
> > Venkat.
> > 
> > > 
> > > > 
> > > > Signed-off-by: Saket Kumar Bhaskar <[email-masked]>
> > > > ---
> > > >   arch/powerpc/net/bpf_jit_comp64.c | 30 ++++++++++++++++++++++++++++++
> > > >   1 file changed, 30 insertions(+)
> > > > 
> > > > diff --git a/arch/powerpc/net/bpf_jit_comp64.c
> > > > b/arch/powerpc/net/ bpf_jit_comp64.c
> > > > index 025524378443..489de21fe3d6 100644
> > > > --- a/arch/powerpc/net/bpf_jit_comp64.c
> > > > +++ b/arch/powerpc/net/bpf_jit_comp64.c
> > > > @@ -409,6 +409,36 @@ asm (
> > > >   "        blr                ;"
> > > >   );
> > > >   +static int bpf_jit_emit_probe_mem_store(struct
> > > > codegen_context *ctx, u32 src_reg, s16 off,
> > > > +                    u32 code, u32 *image)
> > > > +{
> > > > +    u32 tmp1_reg = bpf_to_ppc(TMP_REG_1);
> > > > +    u32 tmp2_reg = bpf_to_ppc(TMP_REG_2);
> > > > +
> > > > +    switch (BPF_SIZE(code)) {
> > > > +    case BPF_B:
> > > > +        EMIT(PPC_RAW_STB(src_reg, tmp1_reg, off));
> > > > +        break;
> > > > +    case BPF_H:
> > > > +        EMIT(PPC_RAW_STH(src_reg, tmp1_reg, off));
> > > > +        break;
> > > > +    case BPF_W:
> > > > +        EMIT(PPC_RAW_STW(src_reg, tmp1_reg, off));
> > > > +        break;
> > > > +    case BPF_DW:
> > > > +        if (off % 4) {
> > > > +            EMIT(PPC_RAW_LI(tmp2_reg, off));
> > > > +            EMIT(PPC_RAW_STDX(src_reg, tmp1_reg, tmp2_reg));
> > > > +        } else {
> > > > +            EMIT(PPC_RAW_STD(src_reg, tmp1_reg, off));
> > > > +        }
> > > > +        break;
> > > > +    default:
> > > > +        return -EINVAL;
> > > > +    }
> > > > +    return 0;
> > > > +}
> > > > +
> > > >   static int emit_atomic_ld_st(const struct bpf_insn insn,
> > > > struct codegen_context *ctx, u32 *image)
> > > >   {
> > > >       u32 code = insn.code;
> > > 
>