qemu-stable
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] virtio-net: fix qemu set used ring flag even vhost started


From: Michael Tokarev
Subject: Re: [PATCH] virtio-net: fix qemu set used ring flag even vhost started
Date: Wed, 3 Apr 2024 08:10:16 +0300
User-agent: Mozilla Thunderbird

02.04.2024 07:51, Yajun Wu:
When vhost-user or vhost-kernel is handling virtio net datapath, qemu
should not touch used ring.

But with vhost-user socket reconnect scenario, in a very rare case (has
pending kick event). VRING_USED_F_NO_NOTIFY is set by qemu in
following code path:
...
This issue causes guest kernel stop kicking device and traffic stop.

Add vhost_started check in virtio_net_handle_tx_bh to fix this wrong
VRING_USED_F_NO_NOTIFY set.

This seems to be qemu-stable material, even if the case when the issue
happens is "very rare", -- is it not?

Thanks,

/mjt

Signed-off-by: Yajun Wu <yajunw@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
---
  hw/net/virtio-net.c | 4 ++++
  1 file changed, 4 insertions(+)

diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index a6ff000cd9..8035e01fdf 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -2865,6 +2865,10 @@ static void virtio_net_handle_tx_bh(VirtIODevice *vdev, 
VirtQueue *vq)
      VirtIONet *n = VIRTIO_NET(vdev);
      VirtIONetQueue *q = &n->vqs[vq2q(virtio_get_queue_index(vq))];
+ if (n->vhost_started) {
+        return;
+    }
+
      if (unlikely((n->status & VIRTIO_NET_S_LINK_UP) == 0)) {
          virtio_net_drop_tx_queue_data(vdev, vq);
          return;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]