Thread (1 message) 1 message, 1 author, 2023-10-08

Re: [PATCH net v2 5/6] virtio-net: fix the vq coalescing setting for vq resize

From: Jason Wang <hidden>
Date: 2023-10-08 05:21:21
Also in: virtualization

On Thu, Oct 5, 2023 at 2:12 PM Heng Qi [off-list ref] wrote:


在 2023/10/3 下午6:41, Paolo Abeni 写道:
quoted
On Mon, 2023-09-25 at 15:53 +0800, Heng Qi wrote:
quoted
According to the definition of virtqueue coalescing spec[1]:

   Upon disabling and re-enabling a transmit virtqueue, the device MUST set
   the coalescing parameters of the virtqueue to those configured through the
   VIRTIO_NET_CTRL_NOTF_COAL_TX_SET command, or, if the driver did not set
   any TX coalescing parameters, to 0.

   Upon disabling and re-enabling a receive virtqueue, the device MUST set
   the coalescing parameters of the virtqueue to those configured through the
   VIRTIO_NET_CTRL_NOTF_COAL_RX_SET command, or, if the driver did not set
   any RX coalescing parameters, to 0.

We need to add this setting for vq resize (ethtool -G) where vq_reset happens.

[1] https://lists.oasis-open.org/archives/virtio-dev/202303/msg00415.html

Fixes: 394bd87764b6 ("virtio_net: support per queue interrupt coalesce command")
Cc: Gavin Li <redacted>
Signed-off-by: Heng Qi <redacted>
@Jason, since you commented on v1, waiting for your ack.
quoted
---
  drivers/net/virtio_net.c | 27 +++++++++++++++++++++++++++
  1 file changed, 27 insertions(+)
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 12ec3ae19b60..cb19b224419b 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -2855,6 +2855,9 @@ static void virtnet_get_ringparam(struct net_device *dev,
     ring->tx_pending = virtqueue_get_vring_size(vi->sq[0].vq);
  }

+static int virtnet_send_ctrl_coal_vq_cmd(struct virtnet_info *vi,
+                                     u16 vqn, u32 max_usecs, u32 max_packets);
+
  static int virtnet_set_ringparam(struct net_device *dev,
                              struct ethtool_ringparam *ring,
                              struct kernel_ethtool_ringparam *kernel_ring,
@@ -2890,12 +2893,36 @@ static int virtnet_set_ringparam(struct net_device *dev,
                     err = virtnet_tx_resize(vi, sq, ring->tx_pending);
                     if (err)
                             return err;
+
+                    /* Upon disabling and re-enabling a transmit virtqueue, the device must
+                     * set the coalescing parameters of the virtqueue to those configured
+                     * through the VIRTIO_NET_CTRL_NOTF_COAL_TX_SET command, or, if the driver
+                     * did not set any TX coalescing parameters, to 0.
+                     */
+                    err = virtnet_send_ctrl_coal_vq_cmd(vi, txq2vq(i),
+                                                        vi->intr_coal_tx.max_usecs,
+                                                        vi->intr_coal_tx.max_packets);
+                    if (err)
+                            return err;
+                    /* Save parameters */
As a very minor nit, I guess the comment could be dropped here (similar
to patch 4/6). @Heng Qi: please don't repost just for this, let's wait
for Jason' comments.
Ok. We are currently on the National Day holiday, Jason may reply in a
few days, thanks!
With the comments removed.

Acked-by: Jason Wang <redacted>

Thanks
quoted
Cheers,

Paolo
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help