qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/1] virtio fix for 2.4
@ 2015-08-05 14:59 Michael S. Tsirkin
  2015-08-05 14:59 ` [Qemu-devel] [PULL 1/1] virtio: fix 1.0 virtqueue migration Michael S. Tsirkin
  2015-08-05 15:59 ` [Qemu-devel] [PULL 0/1] virtio fix for 2.4 Peter Maydell
  0 siblings, 2 replies; 3+ messages in thread
From: Michael S. Tsirkin @ 2015-08-05 14:59 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell

The following changes since commit 2be4f242b50a84bf360df02480b173bfed161107:

  Merge remote-tracking branch 'remotes/ehabkost/tags/x86-pull-request' into staging (2015-08-04 16:51:24 +0100)

are available in the git repository at:

  git://git.kernel.org/pub/scm/virt/kvm/mst/qemu.git tags/for_upstream

for you to fetch changes up to 74aae7b22b8a67cf31937b2f4bdefe2881e799e9:

  virtio: fix 1.0 virtqueue migration (2015-08-05 16:56:34 +0300)

----------------------------------------------------------------
virtio fix for 2.4

Fixes migration in virtio 1 mode.
We still have a known bug with memory hotplug, it doesn't
look like we can fix that in time for 2.4.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

----------------------------------------------------------------
Jason Wang (1):
      virtio: fix 1.0 virtqueue migration

 include/hw/virtio/virtio.h |  6 +++++
 hw/virtio/virtio.c         | 56 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+)

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Qemu-devel] [PULL 1/1] virtio: fix 1.0 virtqueue migration
  2015-08-05 14:59 [Qemu-devel] [PULL 0/1] virtio fix for 2.4 Michael S. Tsirkin
@ 2015-08-05 14:59 ` Michael S. Tsirkin
  2015-08-05 15:59 ` [Qemu-devel] [PULL 0/1] virtio fix for 2.4 Peter Maydell
  1 sibling, 0 replies; 3+ messages in thread
From: Michael S. Tsirkin @ 2015-08-05 14:59 UTC (permalink / raw)
  To: qemu-devel
  Cc: Cornelia Huck, Peter Maydell, Jason Wang, Dr. David Alan Gilbert

From: Jason Wang <jasowang@redhat.com>

1.0 does not requires physically-contiguous pages layout for a
virtqueue. So we could not infer avail and used from desc. This means
we need to migrate vring.avail and vring.used when host support virtio
1.0. This fixes malfunction of virtio 1.0 device after migration.

Cc: Michael S. Tsirkin <mst@redhat.com>
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/virtio/virtio.h |  6 +++++
 hw/virtio/virtio.c         | 56 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+)

diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 59f0763..cccae89 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -272,6 +272,12 @@ static inline bool virtio_has_feature(VirtIODevice *vdev, unsigned int fbit)
     return __virtio_has_feature(vdev->guest_features, fbit);
 }
 
+static inline bool virtio_host_has_feature(VirtIODevice *vdev,
+                                           unsigned int fbit)
+{
+    return __virtio_has_feature(vdev->host_features, fbit);
+}
+
 static inline bool virtio_is_big_endian(VirtIODevice *vdev)
 {
     if (!virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) {
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index ee4e07c..788b556 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -1049,6 +1049,61 @@ static bool virtio_64bit_features_needed(void *opaque)
     return (vdev->host_features >> 32) != 0;
 }
 
+static bool virtio_virtqueue_needed(void *opaque)
+{
+    VirtIODevice *vdev = opaque;
+
+    return virtio_host_has_feature(vdev, VIRTIO_F_VERSION_1);
+}
+
+static void put_virtqueue_state(QEMUFile *f, void *pv, size_t size)
+{
+    VirtIODevice *vdev = pv;
+    int i;
+
+    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
+        qemu_put_be64(f, vdev->vq[i].vring.avail);
+        qemu_put_be64(f, vdev->vq[i].vring.used);
+    }
+}
+
+static int get_virtqueue_state(QEMUFile *f, void *pv, size_t size)
+{
+    VirtIODevice *vdev = pv;
+    int i;
+
+    for (i = 0; i < VIRTIO_QUEUE_MAX; i++) {
+        vdev->vq[i].vring.avail = qemu_get_be64(f);
+        vdev->vq[i].vring.used = qemu_get_be64(f);
+    }
+    return 0;
+}
+
+static VMStateInfo vmstate_info_virtqueue = {
+    .name = "virtqueue_state",
+    .get = get_virtqueue_state,
+    .put = put_virtqueue_state,
+};
+
+static const VMStateDescription vmstate_virtio_virtqueues = {
+    .name = "virtio/virtqueues",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .needed = &virtio_virtqueue_needed,
+    .fields = (VMStateField[]) {
+        {
+            .name         = "virtqueues",
+            .version_id   = 0,
+            .field_exists = NULL,
+            .size         = 0,
+            .info         = &vmstate_info_virtqueue,
+            .flags        = VMS_SINGLE,
+            .offset       = 0,
+        },
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static const VMStateDescription vmstate_virtio_device_endian = {
     .name = "virtio/device_endian",
     .version_id = 1,
@@ -1082,6 +1137,7 @@ static const VMStateDescription vmstate_virtio = {
     .subsections = (const VMStateDescription*[]) {
         &vmstate_virtio_device_endian,
         &vmstate_virtio_64bit_features,
+        &vmstate_virtio_virtqueues,
         NULL
     }
 };
-- 
MST

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PULL 0/1] virtio fix for 2.4
  2015-08-05 14:59 [Qemu-devel] [PULL 0/1] virtio fix for 2.4 Michael S. Tsirkin
  2015-08-05 14:59 ` [Qemu-devel] [PULL 1/1] virtio: fix 1.0 virtqueue migration Michael S. Tsirkin
@ 2015-08-05 15:59 ` Peter Maydell
  1 sibling, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2015-08-05 15:59 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: QEMU Developers

On 5 August 2015 at 15:59, Michael S. Tsirkin <mst@redhat.com> wrote:
> The following changes since commit 2be4f242b50a84bf360df02480b173bfed161107:
>
>   Merge remote-tracking branch 'remotes/ehabkost/tags/x86-pull-request' into staging (2015-08-04 16:51:24 +0100)
>
> are available in the git repository at:
>
>   git://git.kernel.org/pub/scm/virt/kvm/mst/qemu.git tags/for_upstream
>
> for you to fetch changes up to 74aae7b22b8a67cf31937b2f4bdefe2881e799e9:
>
>   virtio: fix 1.0 virtqueue migration (2015-08-05 16:56:34 +0300)
>
> ----------------------------------------------------------------
> virtio fix for 2.4
>
> Fixes migration in virtio 1 mode.
> We still have a known bug with memory hotplug, it doesn't
> look like we can fix that in time for 2.4.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
>
> ----------------------------------------------------------------
> Jason Wang (1):
>       virtio: fix 1.0 virtqueue migration

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-08-05 16:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-05 14:59 [Qemu-devel] [PULL 0/1] virtio fix for 2.4 Michael S. Tsirkin
2015-08-05 14:59 ` [Qemu-devel] [PULL 1/1] virtio: fix 1.0 virtqueue migration Michael S. Tsirkin
2015-08-05 15:59 ` [Qemu-devel] [PULL 0/1] virtio fix for 2.4 Peter Maydell

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).