[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 54/56] dataplane: sync virtio.c and vring.c virtqueu
From: |
Michael Roth |
Subject: |
[Qemu-devel] [PATCH 54/56] dataplane: sync virtio.c and vring.c virtqueue state |
Date: |
Tue, 13 Aug 2013 10:11:18 -0500 |
From: Stefan Hajnoczi <address@hidden>
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 <address@hidden>
(cherry picked from commit 9154b02c53bb6685797c973fcdbec51c4714777d)
Signed-off-by: Michael Roth <address@hidden>
---
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 a58cc53..fb70645 100644
--- a/hw/block/dataplane/virtio-blk.c
+++ b/hw/block/dataplane/virtio-blk.c
@@ -545,7 +545,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.7.9.5
- [Qemu-devel] [PATCH 44/56] xhci: fix segfault, (continued)
- [Qemu-devel] [PATCH 44/56] xhci: fix segfault, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 48/56] iov: handle EOF in iov_send_recv, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 49/56] target-i386: Fix X86CPU error handling, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 46/56] seccomp: add arch_prctl() to the syscall whitelist, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 47/56] seccomp: add additional asynchronous I/O syscalls, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 50/56] ignore SIGPIPE in qemu-img and qemu-io, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 51/56] semaphore: fix a hangup problem under load on NetBSD hosts., Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 52/56] Bugfix for loading multiboot kernels, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 53/56] i82801b11: Fix i82801b11 PCI host bridge config space, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 56/56] vhost: clear signalled_used_valid on vhost stop, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 54/56] dataplane: sync virtio.c and vring.c virtqueue state,
Michael Roth <=
- [Qemu-devel] [PATCH 32/56] block: Add return value for bdrv_flush_all(), Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 38/56] dataplane: refuse to start if device is already in use, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 37/56] gtk: Fix compiler warning (GTK 3 deprecated function), Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 55/56] virtio: clear signalled_used_valid when switching from dataplane, Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 33/56] cpus: Add return value for vm_stop(), Michael Roth, 2013/08/13
- [Qemu-devel] [PATCH 36/56] gtk: don't use g_object_unref on GdkCursor, Michael Roth, 2013/08/13
- Re: [Qemu-devel] [Qemu-stable] Patch Round-up for stable 1.5.3, freeze on 2013-08-16, Doug Goldstein, 2013/08/14