[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <2f2899c4-4e7a-85fd-f399-7cd119fa6aca@redhat.com>
Date: Wed, 26 Apr 2023 11:15:45 +0800
From: Jason Wang <jasowang@...hat.com>
To: Xuan Zhuo <xuanzhuo@...ux.alibaba.com>, netdev@...r.kernel.org
Cc: "Michael S. Tsirkin" <mst@...hat.com>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
Jesper Dangaard Brouer <hawk@...nel.org>,
John Fastabend <john.fastabend@...il.com>,
virtualization@...ts.linux-foundation.org, bpf@...r.kernel.org
Subject: Re: [PATCH net-next v3 14/15] virtio_net: introduce
receive_small_build_xdp
在 2023/4/23 18:57, Xuan Zhuo 写道:
> Simplifying receive_small() function. Bringing the logic relating to
> build_skb together.
>
> Signed-off-by: Xuan Zhuo <xuanzhuo@...ux.alibaba.com>
Acked-by: Jason Wang <jasowang@...hat.com>
Thanks
> ---
> drivers/net/virtio_net.c | 48 ++++++++++++++++++++++++++--------------
> 1 file changed, 31 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index d2973c8fa48c..811cf1046df2 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -931,6 +931,34 @@ static struct page *xdp_linearize_page(struct receive_queue *rq,
> return NULL;
> }
>
> +static struct sk_buff *receive_small_build_skb(struct virtnet_info *vi,
> + unsigned int xdp_headroom,
> + void *buf,
> + unsigned int len)
> +{
> + unsigned int header_offset;
> + unsigned int headroom;
> + unsigned int buflen;
> + struct sk_buff *skb;
> +
> + header_offset = VIRTNET_RX_PAD + xdp_headroom;
> + headroom = vi->hdr_len + header_offset;
> + buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +
> + SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
> +
> + skb = build_skb(buf, buflen);
> + if (!skb)
> + return NULL;
> +
> + skb_reserve(skb, headroom);
> + skb_put(skb, len);
> +
> + buf += header_offset;
> + memcpy(skb_vnet_hdr(skb), buf, vi->hdr_len);
> +
> + return skb;
> +}
> +
> static struct sk_buff *receive_small_xdp(struct net_device *dev,
> struct virtnet_info *vi,
> struct receive_queue *rq,
> @@ -1030,9 +1058,6 @@ static struct sk_buff *receive_small(struct net_device *dev,
> {
> 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;
> @@ -1060,20 +1085,9 @@ static struct sk_buff *receive_small(struct net_device *dev,
> rcu_read_unlock();
> }
>
> - header_offset = VIRTNET_RX_PAD + xdp_headroom;
> - headroom = vi->hdr_len + header_offset;
> - buflen = SKB_DATA_ALIGN(GOOD_PACKET_LEN + headroom) +
> - SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
> -
> - skb = build_skb(buf, buflen);
> - if (!skb)
> - goto err;
> - skb_reserve(skb, headroom);
> - skb_put(skb, len);
> -
> - buf += header_offset;
> - memcpy(skb_vnet_hdr(skb), buf, vi->hdr_len);
> - return skb;
> + skb = receive_small_build_skb(vi, xdp_headroom, buf, len);
> + if (likely(skb))
> + return skb;
>
> err:
> stats->drops++;
Powered by blists - more mailing lists