summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesper Dangaard Brouer <brouer@redhat.com>2018-05-31 11:00:18 +0200
committerAlexei Starovoitov <ast@kernel.org>2018-06-03 08:11:35 -0700
commit1e67575a5840908e33502b210a22509fe5d6ca53 (patch)
tree77bedf3a0ece5c85b36ae0f8eac6f8cfc6a93cf1
parent73de5717eb30ceedef6abf9da4bc2194f25d92ca (diff)
downloadop-kernel-dev-1e67575a5840908e33502b210a22509fe5d6ca53.zip
op-kernel-dev-1e67575a5840908e33502b210a22509fe5d6ca53.tar.gz
bpf/xdp: non-map redirect can avoid calling ndo_xdp_flush
This is the first real user of the XDP_XMIT_FLUSH flag. As pointed out many times, XDP_REDIRECT without using BPF maps is significant slower than the map variant. This is primary due to the lack of bulking, as the ndo_xdp_flush operation is required after each frame (to avoid frames hanging on the egress device). It is still possible to optimize this case. Instead of invoking two NDO indirect calls, which are very expensive with CONFIG_RETPOLINE, instead instruct ndo_xdp_xmit to flush via XDP_XMIT_FLUSH flag. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Acked-by: Song Liu <songliubraving@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
-rw-r--r--net/core/filter.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/net/core/filter.c b/net/core/filter.c
index 56e40da..a72ea9f 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -3056,10 +3056,9 @@ static int __bpf_tx_xdp(struct net_device *dev,
if (unlikely(!xdpf))
return -EOVERFLOW;
- sent = dev->netdev_ops->ndo_xdp_xmit(dev, 1, &xdpf, 0);
+ sent = dev->netdev_ops->ndo_xdp_xmit(dev, 1, &xdpf, XDP_XMIT_FLUSH);
if (sent <= 0)
return sent;
- dev->netdev_ops->ndo_xdp_flush(dev);
return 0;
}
OpenPOWER on IntegriCloud