diff options
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) |