Le 06/04/2023 à 09:35, Hari Bathini a écrit : > Since commit 85e031154c7c ("powerpc/bpf: Perform complete extra passes > to update addresses"), two additional passes are performed to avoid > space and CPU time wastage on powerpc. But these extra passes led to > WARN_ON_ONCE() hits in bpf_add_extable_entry(). Fix it by not adding > extable entries during the extra pass. Are you sure this change is correct ? During the extra pass the code can get shrinked or expanded (within the limits of the size of the preliminary pass). Shouldn't extable entries be populated during the last pass ? Christophe > > Fixes: 85e031154c7c ("powerpc/bpf: Perform complete extra passes to update addresses") > Signed-off-by: Hari Bathini <hbathini@xxxxxxxxxxxxx> > --- > arch/powerpc/net/bpf_jit_comp32.c | 2 +- > arch/powerpc/net/bpf_jit_comp64.c | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/powerpc/net/bpf_jit_comp32.c b/arch/powerpc/net/bpf_jit_comp32.c > index 7f91ea064c08..e788b1fbeee6 100644 > --- a/arch/powerpc/net/bpf_jit_comp32.c > +++ b/arch/powerpc/net/bpf_jit_comp32.c > @@ -977,7 +977,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context * > if (size != BPF_DW && !fp->aux->verifier_zext) > EMIT(PPC_RAW_LI(dst_reg_h, 0)); > > - if (BPF_MODE(code) == BPF_PROBE_MEM) { > + if (BPF_MODE(code) == BPF_PROBE_MEM && !extra_pass) { > int insn_idx = ctx->idx - 1; > int jmp_off = 4; > > diff --git a/arch/powerpc/net/bpf_jit_comp64.c b/arch/powerpc/net/bpf_jit_comp64.c > index 8dd3cabaa83a..1cc2777ec846 100644 > --- a/arch/powerpc/net/bpf_jit_comp64.c > +++ b/arch/powerpc/net/bpf_jit_comp64.c > @@ -921,7 +921,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context * > if (size != BPF_DW && insn_is_zext(&insn[i + 1])) > addrs[++i] = ctx->idx * 4; > > - if (BPF_MODE(code) == BPF_PROBE_MEM) { > + if (BPF_MODE(code) == BPF_PROBE_MEM && !extra_pass) { > ret = bpf_add_extable_entry(fp, image, pass, ctx, ctx->idx - 1, > 4, dst_reg); > if (ret)