[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 01/13] dataplane: sync virtio.c and vring.c virtq
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PATCH v2 01/13] dataplane: sync virtio.c and vring.c virtqueue state |
Date: |
Mon, 15 Jul 2013 22:42:50 +0800 |
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 is very useful since it will allow us to go back to QEMU main loop
for bdrv_drain_all() and live migration.
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
Note this patch was sent separately but I am including it here to make testing
easier.
hw/block/dataplane/virtio-blk.c | 2 +-
hw/virtio/dataplane/vring.c | 8 +++++---
include/hw/virtio/dataplane/vring.h | 2 +-
3 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c
index 0356665..2faed43 100644
--- a/hw/block/dataplane/virtio-blk.c
+++ b/hw/block/dataplane/virtio-blk.c
@@ -537,7 +537,7 @@ void virtio_blk_data_plane_stop(VirtIOBlockDataPlane *s)
/* Clean up guest notifier (irq) */
k->set_guest_notifiers(qbus->parent, 1, false);
- vring_teardown(&s->vring);
+ vring_teardown(&s->vring, s->vdev, 0);
s->started = false;
s->stopping = false;
}
diff --git a/hw/virtio/dataplane/vring.c b/hw/virtio/dataplane/vring.c
index e0d6e83..82cc151 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);
}
diff --git a/include/hw/virtio/dataplane/vring.h
b/include/hw/virtio/dataplane/vring.h
index 9380cb5..c0b69ff 100644
--- a/include/hw/virtio/dataplane/vring.h
+++ b/include/hw/virtio/dataplane/vring.h
@@ -50,7 +50,7 @@ static inline void vring_set_broken(Vring *vring)
}
bool vring_setup(Vring *vring, VirtIODevice *vdev, int n);
-void vring_teardown(Vring *vring);
+void vring_teardown(Vring *vring, VirtIODevice *vdev, int n);
void vring_disable_notification(VirtIODevice *vdev, Vring *vring);
bool vring_enable_notification(VirtIODevice *vdev, Vring *vring);
bool vring_should_notify(VirtIODevice *vdev, Vring *vring);
--
1.8.1.4
- [Qemu-devel] [PATCH v2 00/13] dataplane: use block layer, Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 01/13] dataplane: sync virtio.c and vring.c virtqueue state,
Stefan Hajnoczi <=
- [Qemu-devel] [PATCH v2 02/13] block: add BlockDevOps->drain_threads_cb(), Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 03/13] virtio-blk: implement BlockDevOps->drain_threads_cb(), Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 04/13] exec: do not use qemu/tls.h, Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 05/13] qemu-thread: add TLS wrappers, Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 06/13] block: add thread_aio_context TLS variable, Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 07/13] block: drop bdrv_get_aio_context(), Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 09/13] linux-aio: bind EventNotifier to current AioContext, Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 08/13] main-loop: use thread-local AioContext, Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 10/13] block: disable I/O throttling outside main loop, Stefan Hajnoczi, 2013/07/15
- [Qemu-devel] [PATCH v2 11/13] dataplane: use block layer for I/O, Stefan Hajnoczi, 2013/07/15