nfp: bpf: don't use instruction number for jump target
authorJakub Kicinski <jakub.kicinski@netronome.com>
Wed, 23 Jan 2019 06:45:25 +0000 (22:45 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 24 Jan 2019 01:35:32 +0000 (17:35 -0800)
Instruction number is meaningless at code gen phase.  The target
of the instruction is overwritten by nfp_fixup_branches().  The
convention is to put the raw offset in target address as a place
holder.  See cmp_* functions.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
drivers/net/ethernet/netronome/nfp/bpf/jit.c

index e23ca90289f71ca5776bab7e66659640de1857c2..323587dee498e6d9748050817ac17e779604de66 100644 (file)
@@ -3182,7 +3182,7 @@ bpf_to_bpf_call(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
                wrp_immed_relo(nfp_prog, imm_b(nfp_prog), 0, RELO_IMMED_REL);
        } else {
                ret_tgt = nfp_prog_current_offset(nfp_prog) + 2;
-               emit_br(nfp_prog, BR_UNC, meta->n + 1 + meta->insn.imm, 1);
+               emit_br(nfp_prog, BR_UNC, meta->insn.imm, 1);
                offset_br = nfp_prog_current_offset(nfp_prog);
        }
        wrp_immed_relo(nfp_prog, ret_reg(nfp_prog), ret_tgt, RELO_IMMED_REL);