Thread (12 messages) 12 messages, 3 authors, 2021-11-17

Re: [RFC PATCH 2/4] drivers/net/virtio_net: Changed mergeable buffer length calculation.

From: Andrew Melnichenko <hidden>
Date: 2021-11-17 06:00:05
Also in: lkml, virtualization

On Mon, Nov 1, 2021 at 10:44 AM Michael S. Tsirkin [off-list ref] wrote:
On Sun, Oct 31, 2021 at 06:59:57AM +0200, Andrew Melnychenko wrote:
quoted
Now minimal virtual header length is may include the entire v1 header
if the hash report were populated.

Signed-off-by: Andrew Melnychenko <redacted>
subject isn't really descriptive. changed it how?

And I couldn't really decypher what this log entry means either.
I'll change it in the next patch.
So, I've tried to ensure that the v1 header with the hash report will
be available if required in new patches.
quoted
---
 drivers/net/virtio_net.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index b72b21ac8ebd..abca2e93355d 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -393,7 +393,9 @@ static struct sk_buff *page_to_skb(struct virtnet_info *vi,
      hdr_p = p;

      hdr_len = vi->hdr_len;
-     if (vi->mergeable_rx_bufs)
+     if (vi->has_rss_hash_report)
+             hdr_padded_len = sizeof(struct virtio_net_hdr_v1_hash);
+     else if (vi->mergeable_rx_bufs)
              hdr_padded_len = sizeof(*hdr);
      else
              hdr_padded_len = sizeof(struct padded_vnet_hdr);
@@ -1252,7 +1254,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)
Is this pointer chasing the best we can do?
I'll change that.
quoted
@@ -2817,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;
      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;
--
2.33.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help