summary refs log tree commit diff stats
path: root/hw/net/vhost_net.c
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2014-09-04 12:18:36 +0100
committerPeter Maydell <peter.maydell@linaro.org>2014-09-04 12:19:37 +0100
commit4771b02512ddc52ee5b946a3487c78fbce60e0ab (patch)
treecf46c5d6e55bdb330ab0252fd8c2f8914455ce15 /hw/net/vhost_net.c
parentf2426947decc96bde4f9ea50097dac66a0a48acc (diff)
downloadfocaccia-qemu-4771b02512ddc52ee5b946a3487c78fbce60e0ab.tar.gz
focaccia-qemu-4771b02512ddc52ee5b946a3487c78fbce60e0ab.zip
Revert "vhost_net: start/stop guest notifiers properly"
This reverts commit aad4dce934649b3a398396fc2a76f215bb194ea4.

I accidentally merged the wrong version of a pull request
which had a buggy version of this patch. Reverting the
buggy version means we can then cleanly merge in the correct
pull with the corrected change.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/net/vhost_net.c')
-rw-r--r--hw/net/vhost_net.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
index ba5d544642..9bbf2ee4ce 100644
--- a/hw/net/vhost_net.c
+++ b/hw/net/vhost_net.c
@@ -188,19 +188,16 @@ bool vhost_net_query(VHostNetState *net, VirtIODevice *dev)
     return vhost_dev_query(&net->dev, dev);
 }
 
-static void vhost_net_set_vq_index(struct vhost_net *net, int vq_index)
-{
-    net->dev.vq_index = vq_index;
-}
-
 static int vhost_net_start_one(struct vhost_net *net,
-                               VirtIODevice *dev)
+                               VirtIODevice *dev,
+                               int vq_index)
 {
     struct vhost_vring_file file = { };
     int r;
 
     net->dev.nvqs = 2;
     net->dev.vqs = net->vqs;
+    net->dev.vq_index = vq_index;
 
     r = vhost_dev_enable_notifiers(&net->dev, dev);
     if (r < 0) {
@@ -304,7 +301,11 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs,
     }
 
     for (i = 0; i < total_queues; i++) {
-        vhost_net_set_vq_index(get_vhost_net(ncs[i].peer), i * 2);
+        r = vhost_net_start_one(get_vhost_net(ncs[i].peer), dev, i * 2);
+
+        if (r < 0) {
+            goto err;
+        }
     }
 
     r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true);
@@ -313,14 +314,6 @@ int vhost_net_start(VirtIODevice *dev, NetClientState *ncs,
         goto err;
     }
 
-    for (i = 0; i < total_queues; i++) {
-        r = vhost_net_start_one(get_vhost_net(ncs[i].peer), dev);
-
-        if (r < 0) {
-            goto err;
-        }
-    }
-
     return 0;
 
 err:
@@ -338,16 +331,16 @@ void vhost_net_stop(VirtIODevice *dev, NetClientState *ncs,
     VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(vbus);
     int i, r;
 
-    for (i = 0; i < total_queues; i++) {
-        vhost_net_stop_one(get_vhost_net(ncs[i].peer), dev);
-    }
-
     r = k->set_guest_notifiers(qbus->parent, total_queues * 2, false);
     if (r < 0) {
         fprintf(stderr, "vhost guest notifier cleanup failed: %d\n", r);
         fflush(stderr);
     }
     assert(r >= 0);
+
+    for (i = 0; i < total_queues; i++) {
+        vhost_net_stop_one(get_vhost_net(ncs[i].peer), dev);
+    }
 }
 
 void vhost_net_cleanup(struct vhost_net *net)