From: Ladi Prosek <lprosek@redhat.com>
To: qemu-devel@nongnu.org
Cc: mst@redhat.com, rkagan@virtuozzo.com, stefanha@redhat.com,
lprosek@redhat.com
Subject: [Qemu-devel] [PATCH 3/3] virtio-balloon: fix stats vq migration
Date: Wed, 7 Sep 2016 17:20:49 +0200 [thread overview]
Message-ID: <1473261649-31465-4-git-send-email-lprosek@redhat.com> (raw)
In-Reply-To: <1473261649-31465-1-git-send-email-lprosek@redhat.com>
The statistics virtqueue is not migrated properly because virtio-balloon
does not include s->stats_vq_elem in the migration stream.
After migration the statistics virtqueue hangs because the host never
completes the last element (s->stats_vq_elem is NULL on the destination
QEMU). Therefore the guest never submits new elements and the virtqueue
is hung.
Instead of changing the migration stream format in an incompatible way,
detect the migration case and rewind the virtqueue so the last element
can be completed.
Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Roman Kagan <rkagan@virtuozzo.com>
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Suggested-by: Roman Kagan <rkagan@virtuozzo.com>
Signed-off-by: Ladi Prosek <lprosek@redhat.com>
---
hw/virtio/virtio-balloon.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/hw/virtio/virtio-balloon.c b/hw/virtio/virtio-balloon.c
index ad4189a..49a2f4a 100644
--- a/hw/virtio/virtio-balloon.c
+++ b/hw/virtio/virtio-balloon.c
@@ -469,6 +469,18 @@ static void virtio_balloon_device_reset(VirtIODevice *vdev)
}
}
+static void virtio_balloon_set_status(VirtIODevice *vdev, uint8_t status)
+{
+ VirtIOBalloon *s = VIRTIO_BALLOON(vdev);
+
+ if (!s->stats_vq_elem && vdev->vm_running &&
+ (status & VIRTIO_CONFIG_S_DRIVER_OK) && virtqueue_rewind(s->svq, 1)) {
+ /* poll stats queue for the element we have discarded when the VM
+ * was stopped */
+ virtio_balloon_receive_stats(vdev, s->svq);
+ }
+}
+
static void virtio_balloon_instance_init(Object *obj)
{
VirtIOBalloon *s = VIRTIO_BALLOON(obj);
@@ -506,6 +518,7 @@ static void virtio_balloon_class_init(ObjectClass *klass, void *data)
vdc->get_features = virtio_balloon_get_features;
vdc->save = virtio_balloon_save_device;
vdc->load = virtio_balloon_load_device;
+ vdc->set_status = virtio_balloon_set_status;
}
static const TypeInfo virtio_balloon_info = {
--
2.5.5
next prev parent reply other threads:[~2016-09-07 15:21 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-07 15:20 [Qemu-devel] [PATCH 0/3] virtio-balloon: stats vq fixes Ladi Prosek
2016-09-07 15:20 ` [Qemu-devel] [PATCH 1/3] virtio-balloon: discard virtqueue element on reset Ladi Prosek
2016-09-07 17:48 ` Stefan Hajnoczi
2016-09-08 6:38 ` Roman Kagan
2016-09-07 15:20 ` [Qemu-devel] [PATCH 2/3] virtio: add virtqueue_rewind() Ladi Prosek
2016-09-08 6:44 ` Roman Kagan
2016-09-08 7:30 ` Ladi Prosek
2016-09-12 9:20 ` Stefan Hajnoczi
2016-09-07 15:20 ` Ladi Prosek [this message]
2016-09-07 18:02 ` [Qemu-devel] [PATCH 3/3] virtio-balloon: fix stats vq migration Stefan Hajnoczi
2016-09-08 6:47 ` Roman Kagan
2016-09-07 18:02 ` [Qemu-devel] [PATCH 0/3] virtio-balloon: stats vq fixes Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1473261649-31465-4-git-send-email-lprosek@redhat.com \
--to=lprosek@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rkagan@virtuozzo.com \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).