summaryrefslogtreecommitdiff
path: root/drivers/net/virtio_net.c
diff options
context:
space:
mode:
authorXuan Zhuo <xuanzhuo@linux.alibaba.com>2023-05-08 14:14:15 +0800
committerJakub Kicinski <kuba@kernel.org>2023-05-09 19:44:27 -0700
commitaef76506bc64bbf567490cbe437c26f1aadeee90 (patch)
tree45ae6943d6114ae2dbe80ac3a788004427d4a6b6 /drivers/net/virtio_net.c
parent7af70fc169bd254aea780115b0f355956f84902b (diff)
downloadlwn-aef76506bc64bbf567490cbe437c26f1aadeee90.tar.gz
lwn-aef76506bc64bbf567490cbe437c26f1aadeee90.zip
virtio_net: small: remove skip_xdp
Because the skb build code is not shared between xdp and non-xdp, and the xdp code in receive_small() is simpler, so "skip_xdp" is not needed. We can remove it. Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com> Acked-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/virtio_net.c')
-rw-r--r--drivers/net/virtio_net.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index b26d907b5ba5..a0a4f35b965b 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1028,13 +1028,12 @@ static struct sk_buff *receive_small(struct net_device *dev,
unsigned int *xdp_xmit,
struct virtnet_rq_stats *stats)
{
- struct sk_buff *skb;
- struct bpf_prog *xdp_prog;
unsigned int xdp_headroom = (unsigned long)ctx;
struct page *page = virt_to_head_page(buf);
unsigned int header_offset;
unsigned int headroom;
unsigned int buflen;
+ struct sk_buff *skb;
len -= vi->hdr_len;
stats->bytes += len;
@@ -1046,22 +1045,21 @@ static struct sk_buff *receive_small(struct net_device *dev,
goto err;
}
- if (likely(!vi->xdp_enabled)) {
- xdp_prog = NULL;
- goto skip_xdp;
- }
+ if (unlikely(vi->xdp_enabled)) {
+ struct bpf_prog *xdp_prog;
- rcu_read_lock();
- xdp_prog = rcu_dereference(rq->xdp_prog);
- if (xdp_prog) {
- skb = receive_small_xdp(dev, vi, rq, xdp_prog, buf, xdp_headroom,
- len, xdp_xmit, stats);
+ rcu_read_lock();
+ xdp_prog = rcu_dereference(rq->xdp_prog);
+ if (xdp_prog) {
+ skb = receive_small_xdp(dev, vi, rq, xdp_prog, buf,
+ xdp_headroom, len, xdp_xmit,
+ stats);
+ rcu_read_unlock();
+ return skb;
+ }
rcu_read_unlock();
- return skb;
}
- rcu_read_unlock();
-skip_xdp:
header_offset = VIRTNET_RX_PAD + xdp_headroom;
headroom = vi->hdr_len + header_offset;
buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +