summaryrefslogtreecommitdiff
path: root/hw/virtio/dataplane
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@redhat.com>2013-07-01 13:29:17 +0200
committerStefan Hajnoczi <stefanha@redhat.com>2013-07-19 12:29:21 +0800
commit9154b02c53bb6685797c973fcdbec51c4714777d (patch)
tree0ecfc49d77e7bf9992b9986d108a6102926c8d2c /hw/virtio/dataplane
parent0c14fb47ece5ef42d7a0a4b3e8e43e022b375720 (diff)
downloadqemu-9154b02c53bb6685797c973fcdbec51c4714777d.tar.gz
qemu-9154b02c53bb6685797c973fcdbec51c4714777d.tar.bz2
qemu-9154b02c53bb6685797c973fcdbec51c4714777d.zip
dataplane: sync virtio.c and vring.c virtqueue state
Load the virtio.c state into vring.c when we start dataplane mode and vice versa when stopping dataplane mode. This patch makes it possible to start and stop dataplane any time while the guest is running. This will eventually allow us to go back to QEMU main loop for bdrv_drain_all() and live migration. In the meantime, this patch makes the dataplane lifecycle more robust but should make no visible difference. It may be useful in the virtio-net dataplane effort. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw/virtio/dataplane')
-rw-r--r--hw/virtio/dataplane/vring.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/hw/virtio/dataplane/vring.c b/hw/virtio/dataplane/vring.c
index e0d6e83625..82cc151b17 100644
--- a/hw/virtio/dataplane/vring.c
+++ b/hw/virtio/dataplane/vring.c
@@ -39,8 +39,8 @@ bool vring_setup(Vring *vring, VirtIODevice *vdev, int n)
vring_init(&vring->vr, virtio_queue_get_num(vdev, n), vring_ptr, 4096);
- vring->last_avail_idx = 0;
- vring->last_used_idx = 0;
+ vring->last_avail_idx = virtio_queue_get_last_avail_idx(vdev, n);
+ vring->last_used_idx = vring->vr.used->idx;
vring->signalled_used = 0;
vring->signalled_used_valid = false;
@@ -49,8 +49,10 @@ bool vring_setup(Vring *vring, VirtIODevice *vdev, int n)
return true;
}
-void vring_teardown(Vring *vring)
+void vring_teardown(Vring *vring, VirtIODevice *vdev, int n)
{
+ virtio_queue_set_last_avail_idx(vdev, n, vring->last_avail_idx);
+
hostmem_finalize(&vring->hostmem);
}