[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 7/7] virtio-net: purge outstanding packets when start
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 7/7] virtio-net: purge outstanding packets when starting vhost |
Date: |
Thu, 4 Sep 2014 16:50:11 +0100 |
From: "Michael S. Tsirkin" <address@hidden>
whenever we start vhost, virtio could have outstanding packets
queued, when they complete later we'll modify the ring
while vhost is processing it.
To prevent this, purge outstanding packets on vhost start.
Cc: address@hidden
Cc: Jason Wang <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
hw/net/virtio-net.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 365e266..826a2a5 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -125,10 +125,23 @@ static void virtio_net_vhost_status(VirtIONet *n, uint8_t
status)
return;
}
if (!n->vhost_started) {
- int r;
+ int r, i;
+
if (!vhost_net_query(get_vhost_net(nc->peer), vdev)) {
return;
}
+
+ /* Any packets outstanding? Purge them to avoid touching rings
+ * when vhost is running.
+ */
+ for (i = 0; i < queues; i++) {
+ NetClientState *qnc = qemu_get_subqueue(n->nic, i);
+
+ /* Purge both directions: TX and RX. */
+ qemu_net_queue_purge(qnc->peer->incoming_queue, qnc);
+ qemu_net_queue_purge(qnc->incoming_queue, qnc->peer);
+ }
+
n->vhost_started = 1;
r = vhost_net_start(vdev, n->nic->ncs, queues);
if (r < 0) {
--
1.9.3
- [Qemu-devel] [PULL 0/7] Net patches, Stefan Hajnoczi, 2014/09/04
- [Qemu-devel] [PULL 2/7] net: don't use set/get_pointer() in set/get_netdev(), Stefan Hajnoczi, 2014/09/04
- [Qemu-devel] [PULL 1/7] net: Forbid dealing with packets when VM is not running, Stefan Hajnoczi, 2014/09/04
- [Qemu-devel] [PULL 4/7] virtio: don't call device on !vm_running, Stefan Hajnoczi, 2014/09/04
- [Qemu-devel] [PULL 5/7] net: invoke callback when purging queue, Stefan Hajnoczi, 2014/09/04
- [Qemu-devel] [PULL 3/7] virtio-net: don't run bh on vm stopped, Stefan Hajnoczi, 2014/09/04
- [Qemu-devel] [PULL 6/7] net: complete all queued packets on VM stop, Stefan Hajnoczi, 2014/09/04
- [Qemu-devel] [PULL 7/7] virtio-net: purge outstanding packets when starting vhost,
Stefan Hajnoczi <=