]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
nfp: bpf: allow source ptr type be map ptr in memcpy optimization
authorJiong Wang <jiong.wang@netronome.com>
Wed, 27 Jun 2018 02:48:52 +0000 (19:48 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Wed, 27 Jun 2018 08:57:15 +0000 (10:57 +0200)
Map read has been supported on NFP, this patch enables optimization
for memcpy from map to packet.

This patch also fixed one latent bug which will cause copying from
unexpected address once memcpy for map pointer enabled.  The fixed
code path was not exercised before.

Reported-by: Mary Pham <mary.pham@netronome.com>
Reported-by: David Beckett <david.beckett@netronome.com>
Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
drivers/net/ethernet/netronome/nfp/bpf/jit.c

index 8a92088df0d7bf4966342631fb412b94f79a3ff4..33111739b210beea746095ce8e5d76bdec9f290c 100644 (file)
@@ -670,7 +670,7 @@ static int nfp_cpp_memcpy(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta)
        xfer_num = round_up(len, 4) / 4;
 
        if (src_40bit_addr)
-               addr40_offset(nfp_prog, meta->insn.src_reg, off, &src_base,
+               addr40_offset(nfp_prog, meta->insn.src_reg * 2, off, &src_base,
                              &off);
 
        /* Setup PREV_ALU fields to override memory read length. */
@@ -3299,7 +3299,8 @@ curr_pair_is_memcpy(struct nfp_insn_meta *ld_meta,
        if (!is_mbpf_load(ld_meta) || !is_mbpf_store(st_meta))
                return false;
 
-       if (ld_meta->ptr.type != PTR_TO_PACKET)
+       if (ld_meta->ptr.type != PTR_TO_PACKET &&
+           ld_meta->ptr.type != PTR_TO_MAP_VALUE)
                return false;
 
        if (st_meta->ptr.type != PTR_TO_PACKET)