nfp: bpf: pass dst register to ld_field instruction
authorJakub Kicinski <jakub.kicinski@netronome.com>
Mon, 9 Oct 2017 04:04:17 +0000 (21:04 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 9 Oct 2017 16:51:03 +0000 (09:51 -0700)
ld_field instruction is a bit special because the encoding uses
two source registers and one of them becomes the output.  We do
need to pass the dst register to our encoding helpers though,
otherwise the "write both banks" flag will not be observed.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/bpf/jit.c

index f68052367db708d11142ef5fab2a434c350cf7cf..13148f30fc4c1877d0ad3084aa06dc2bbe5d59e3 100644 (file)
@@ -408,7 +408,8 @@ emit_ld_field_any(struct nfp_prog *nfp_prog, enum shf_sc sc, u8 shift,
        struct nfp_insn_re_regs reg;
        int err;
 
-       err = swreg_to_restricted(reg_none(), dst, src, &reg, true);
+       /* Note: ld_field is special as it uses one of the src regs as dst */
+       err = swreg_to_restricted(dst, dst, src, &reg, true);
        if (err) {
                nfp_prog->error = err;
                return;