diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2014-09-04 12:18:36 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2014-09-04 12:19:37 +0100 |
commit | 4771b02512ddc52ee5b946a3487c78fbce60e0ab (patch) | |
tree | cf46c5d6e55bdb330ab0252fd8c2f8914455ce15 /hw/net | |
parent | f2426947decc96bde4f9ea50097dac66a0a48acc (diff) |
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')
-rw-r--r-- | hw/net/vhost_net.c | 31 |
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) |