summaryrefslogtreecommitdiff
path: root/hw/virtio-net.c
diff options
context:
space:
mode:
authorJason Wang <jasowang@redhat.com>2013-01-30 19:12:35 +0800
committerAnthony Liguori <aliguori@us.ibm.com>2013-02-01 11:03:02 -0600
commita9f98bb5ebe6fb1869321dcc58e72041ae626ad8 (patch)
treefe66f183e45763207d12f5298fb8d8d9e3911228 /hw/virtio-net.c
parent264986e2c8f14a0f4a32ac6f1e083905833a5fc7 (diff)
downloadqemu-a9f98bb5ebe6fb1869321dcc58e72041ae626ad8.tar.gz
vhost: multiqueue support
This patch lets vhost support multiqueue. The idea is simple, just launching multiple threads of vhost and let each of vhost thread processing a subset of the virtqueues of the device. After this change each emulated device can have multiple vhost threads as its backend. To do this, a virtqueue index were introduced to record to first virtqueue that will be handled by this vhost_net device. Based on this and nvqs, vhost could calculate its relative index to setup vhost_net device. Since we may have many vhost/net devices for a virtio-net device. The setting of guest notifiers were moved out of the starting/stopping of a specific vhost thread. The vhost_net_{start|stop}() were renamed to vhost_net_{start|stop}_one(), and a new vhost_net_{start|stop}() were introduced to configure the guest notifiers and start/stop all vhost/vhost_net devices. Signed-off-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'hw/virtio-net.c')
-rw-r--r--hw/virtio-net.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index a967006cfc..f4146aafc8 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -130,14 +130,14 @@ static void virtio_net_vhost_status(VirtIONet *n, uint8_t status)
return;
}
n->vhost_started = 1;
- r = vhost_net_start(tap_get_vhost_net(nc->peer), &n->vdev);
+ r = vhost_net_start(&n->vdev, nc, 1);
if (r < 0) {
error_report("unable to start vhost net: %d: "
"falling back on userspace virtio", -r);
n->vhost_started = 0;
}
} else {
- vhost_net_stop(tap_get_vhost_net(nc->peer), &n->vdev);
+ vhost_net_stop(&n->vdev, nc, 1);
n->vhost_started = 0;
}
}