]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
xdp: unlikely instrumentation for xdp map redirect
authorJesper Dangaard Brouer <brouer@redhat.com>
Mon, 3 Sep 2018 07:54:57 +0000 (09:54 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 7 Sep 2018 05:34:08 +0000 (22:34 -0700)
Notice the compiler generated ASM code layout was suboptimal.  It
assumed map enqueue errors as the likely case, which is shouldn't.
It assumed that xdp_do_flush_map() was a likely case, due to maps
changing between packets, which should be very unlikely.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
net/core/filter.c

index d301134bca3a2e8e8adfd18e0e245951503ddeb6..80200f719028dfa92bdb1e95c478046797ac54d2 100644 (file)
@@ -3187,7 +3187,7 @@ static int __bpf_tx_xdp_map(struct net_device *dev_rx, void *fwd,
                struct bpf_dtab_netdev *dst = fwd;
 
                err = dev_map_enqueue(dst, xdp, dev_rx);
-               if (err)
+               if (unlikely(err))
                        return err;
                __dev_map_insert_ctx(map, index);
                break;
@@ -3196,7 +3196,7 @@ static int __bpf_tx_xdp_map(struct net_device *dev_rx, void *fwd,
                struct bpf_cpu_map_entry *rcpu = fwd;
 
                err = cpu_map_enqueue(rcpu, xdp, dev_rx);
-               if (err)
+               if (unlikely(err))
                        return err;
                __cpu_map_insert_ctx(map, index);
                break;
@@ -3284,7 +3284,7 @@ static int xdp_do_redirect_map(struct net_device *dev, struct xdp_buff *xdp,
                err = -EINVAL;
                goto err;
        }
-       if (ri->map_to_flush && ri->map_to_flush != map)
+       if (ri->map_to_flush && unlikely(ri->map_to_flush != map))
                xdp_do_flush_map();
 
        err = __bpf_tx_xdp_map(dev, fwd, map, xdp, index);