[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <65fe6644-bccd-00aa-7c72-53da385bd47e@redhat.com>
Date: Wed, 1 Sep 2021 14:52:20 +0800
From: Jason Wang <jasowang@...hat.com>
To: Andrew Melnychenko <andrew@...nix.com>, mst@...hat.com,
davem@...emloft.net, kuba@...nel.org
Cc: virtualization@...ts.linux-foundation.org, netdev@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH 1/3] drivers/net/virtio_net: Fixed vheader to use v1.
在 2021/8/19 上午1:54, Andrew Melnychenko 写道:
> The header v1 provides additional info about RSS.
> Added changes to computing proper header length.
> In the next patches, the header may contain RSS hash info
> for the hash population.
>
> Signed-off-by: Andrew Melnychenko <andrew@...nix.com>
> ---
> drivers/net/virtio_net.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
> index 56c3f8519093..85427b4f51bc 100644
> --- a/drivers/net/virtio_net.c
> +++ b/drivers/net/virtio_net.c
> @@ -240,13 +240,13 @@ struct virtnet_info {
> };
>
> struct padded_vnet_hdr {
> - struct virtio_net_hdr_mrg_rxbuf hdr;
> + struct virtio_net_hdr_v1_hash hdr;
> /*
> * hdr is in a separate sg buffer, and data sg buffer shares same page
> * with this header sg. This padding makes next sg 16 byte aligned
> * after the header.
> */
> - char padding[4];
> + char padding[12];
> };
So we had:
if (vi->mergeable_rx_bufs)
hdr_padded_len = sizeof(*hdr);
else
hdr_padded_len = sizeof(struct padded_vnet_hdr);
I wonder if it's better to add one ore condition for the hash header
instead of enforcing it even if it was not negotiated.
>
> static bool is_xdp_frame(void *ptr)
> @@ -1258,7 +1258,7 @@ static unsigned int get_mergeable_buf_len(struct receive_queue *rq,
> struct ewma_pkt_len *avg_pkt_len,
> unsigned int room)
> {
> - const size_t hdr_len = sizeof(struct virtio_net_hdr_mrg_rxbuf);
> + const size_t hdr_len = ((struct virtnet_info *)(rq->vq->vdev->priv))->hdr_len;
> unsigned int len;
>
> if (room)
> @@ -1642,7 +1642,7 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb)
> const unsigned char *dest = ((struct ethhdr *)skb->data)->h_dest;
> struct virtnet_info *vi = sq->vq->vdev->priv;
> int num_sg;
> - unsigned hdr_len = vi->hdr_len;
> + unsigned int hdr_len = vi->hdr_len;
Looks like an unnecessary change.
> bool can_push;
>
> pr_debug("%s: xmit %p %pM\n", vi->dev->name, skb, dest);
> @@ -2819,7 +2819,7 @@ static void virtnet_del_vqs(struct virtnet_info *vi)
> */
> static unsigned int mergeable_min_buf_len(struct virtnet_info *vi, struct virtqueue *vq)
> {
> - const unsigned int hdr_len = sizeof(struct virtio_net_hdr_mrg_rxbuf);
> + const unsigned int hdr_len = vi->hdr_len;
I think the change here and get_mergeable_buf_len() should be a separate
patch.
Thanks
> unsigned int rq_size = virtqueue_get_vring_size(vq);
> unsigned int packet_len = vi->big_packets ? IP_MAX_MTU : vi->dev->max_mtu;
> unsigned int buf_len = hdr_len + ETH_HLEN + VLAN_HLEN + packet_len;
Powered by blists - more mailing lists