On Sun, Apr 23, 2023 at 6:58 PM Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> wrote: > > now, the process of xdp is simple, we can remove the skip_xdp. I would say the reason why xdp is simple, I think it is because the skb build path is not shared between XDP and non-XDP case. Other than this Acked-by: Jason Wang <jasowang@xxxxxxxxxx> Thanks > > Signed-off-by: Xuan Zhuo <xuanzhuo@xxxxxxxxxxxxxxxxx> > --- > drivers/net/virtio_net.c | 26 ++++++++++++-------------- > 1 file changed, 12 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c > index 601c0e7fc32b..d2973c8fa48c 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) + > -- > 2.32.0.3.g01195cf9f >