diff mbox

[v2] virtio-9p: migrate virtio subsections

Message ID 20150929120001.14795.67055.stgit@bahia.huguette.org
State New
Headers show

Commit Message

Greg Kurz Sept. 29, 2015, 12:06 p.m. UTC
In a cross-endian setup, the virtio-9p device has state in @device_endian. It
must be migrated. This patch just adds the minimal support to live migrate
generic virtio subsections where @device_endian is handled.

Please note that this is unrelated to the fact that we block migration when
the 9p share is mounted in the guest. It fixes the case where we want to
migrate an unactive 9p device (not mounted in the guest) to a QEMU with
different endianness: the migration currently succeeds but leaves the device
in an inconsistent state that causes mount to hang until we reboot the guest.

Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
---
v2: more detailed change log
---
 hw/9pfs/virtio-9p-device.c |   11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Greg Kurz Oct. 2, 2015, 1:45 p.m. UTC | #1
On Tue, 29 Sep 2015 14:06:43 +0200
Greg Kurz <gkurz@linux.vnet.ibm.com> wrote:

> In a cross-endian setup, the virtio-9p device has state in @device_endian. It
> must be migrated. This patch just adds the minimal support to live migrate
> generic virtio subsections where @device_endian is handled.
> 
> Please note that this is unrelated to the fact that we block migration when
> the 9p share is mounted in the guest. It fixes the case where we want to
> migrate an unactive 9p device (not mounted in the guest) to a QEMU with
> different endianness: the migration currently succeeds but leaves the device
> in an inconsistent state that causes mount to hang until we reboot the guest.
> 
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> ---
> v2: more detailed change log
> ---


The title and change log for this patch are wrong... it should read virtio-9p
does not support migration at all, not specifically with cross-endian setups.

It does not support hot unplug either and crashes QEMU... leaving no alternative
to migrate the guest anyway.

You can forget about this patch for now... I'll try to come up with a new series.

Cheers.

--
Greg

>  hw/9pfs/virtio-9p-device.c |   11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c
> index 93a407c45926..e3abcfaffb2a 100644
> --- a/hw/9pfs/virtio-9p-device.c
> +++ b/hw/9pfs/virtio-9p-device.c
> @@ -43,6 +43,16 @@ static void virtio_9p_get_config(VirtIODevice *vdev, uint8_t *config)
>      g_free(cfg);
>  }
> 
> +static void virtio_9p_save(QEMUFile *f, void *opaque)
> +{
> +    virtio_save(VIRTIO_DEVICE(opaque), f);
> +}
> +
> +static int virtio_9p_load(QEMUFile *f, void *opaque, int version_id)
> +{
> +    return virtio_load(VIRTIO_DEVICE(opaque), f, version_id);
> +}
> +
>  static void virtio_9p_device_realize(DeviceState *dev, Error **errp)
>  {
>      VirtIODevice *vdev = VIRTIO_DEVICE(dev);
> @@ -130,6 +140,7 @@ static void virtio_9p_device_realize(DeviceState *dev, Error **errp)
>      }
>      v9fs_path_free(&path);
> 
> +    register_savevm(dev, "virtio-9p", -1, 1, virtio_9p_save, virtio_9p_load, s);
>      return;
>  out:
>      g_free(s->ctx.fs_root);
> 
>
diff mbox

Patch

diff --git a/hw/9pfs/virtio-9p-device.c b/hw/9pfs/virtio-9p-device.c
index 93a407c45926..e3abcfaffb2a 100644
--- a/hw/9pfs/virtio-9p-device.c
+++ b/hw/9pfs/virtio-9p-device.c
@@ -43,6 +43,16 @@  static void virtio_9p_get_config(VirtIODevice *vdev, uint8_t *config)
     g_free(cfg);
 }
 
+static void virtio_9p_save(QEMUFile *f, void *opaque)
+{
+    virtio_save(VIRTIO_DEVICE(opaque), f);
+}
+
+static int virtio_9p_load(QEMUFile *f, void *opaque, int version_id)
+{
+    return virtio_load(VIRTIO_DEVICE(opaque), f, version_id);
+}
+
 static void virtio_9p_device_realize(DeviceState *dev, Error **errp)
 {
     VirtIODevice *vdev = VIRTIO_DEVICE(dev);
@@ -130,6 +140,7 @@  static void virtio_9p_device_realize(DeviceState *dev, Error **errp)
     }
     v9fs_path_free(&path);
 
+    register_savevm(dev, "virtio-9p", -1, 1, virtio_9p_save, virtio_9p_load, s);
     return;
 out:
     g_free(s->ctx.fs_root);