diff mbox

[03/13] virtio: Migration helper function and macro

Message ID 1466536447-30146-4-git-send-email-dgilbert@redhat.com
State New
Headers show

Commit Message

Dr. David Alan Gilbert June 21, 2016, 7:13 p.m. UTC
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

To make conversion of virtio devices to VMState simple
at first add a helper function for the simple virtio_save
case and a helper macro that defines the VMState structure.
These will probably go away or change as more of the virtio
code gets converted.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 hw/virtio/virtio.c         |  6 ++++++
 include/hw/virtio/virtio.h | 20 ++++++++++++++++++++
 2 files changed, 26 insertions(+)

Comments

Cornelia Huck June 22, 2016, 5:39 p.m. UTC | #1
On Tue, 21 Jun 2016 20:13:57 +0100
"Dr. David Alan Gilbert (git)" <dgilbert@redhat.com> wrote:

> From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> 
> To make conversion of virtio devices to VMState simple
> at first add a helper function for the simple virtio_save
> case and a helper macro that defines the VMState structure.
> These will probably go away or change as more of the virtio
> code gets converted.
> 
> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
>  hw/virtio/virtio.c         |  6 ++++++
>  include/hw/virtio/virtio.h | 20 ++++++++++++++++++++
>  2 files changed, 26 insertions(+)
> 
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 7ed06ea..7322018 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -1444,6 +1444,12 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f)
>      vmstate_save_state(f, &vmstate_virtio, vdev, NULL);
>  }
> 
> +/* A wrapper for use as a VMState .put function */
> +void virtio_vmstate_save(QEMUFile *f, void *opaque, size_t size)
> +{
> +    virtio_save(VIRTIO_DEVICE(opaque), f);
> +}
> +

Providing a macro that generates a .get function for a given version is
probably overkill.

>  static int virtio_set_features_nocheck(VirtIODevice *vdev, uint64_t val)
>  {
>      VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index 96b581d..b6887e7 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -167,6 +167,26 @@ bool virtio_should_notify(VirtIODevice *vdev, VirtQueue *vq);
>  void virtio_notify(VirtIODevice *vdev, VirtQueue *vq);
> 
>  void virtio_save(VirtIODevice *vdev, QEMUFile *f);
> +void virtio_vmstate_save(QEMUFile *f, void *opaque, size_t size);
> +
> +#define VMSTATE_VIRTIO_DEVICE(devname, v, getf, putf) \
> +    static const VMStateDescription vmstate_virtio_ ## devname = { \
> +        .name = "virtio-" #devname ,          \
> +        .minimum_version_id = v,              \
> +        .version_id = v,                      \
> +        .fields = (VMStateField[]) {          \
> +            {                                 \
> +                .name = "virtio",             \
> +                .info = &(const VMStateInfo) {\
> +                        .name = "virtio",     \
> +                        .get = getf,          \
> +                        .put = putf,          \
> +                    },                        \
> +                .flags = VMS_SINGLE,          \
> +            },                                \
> +            VMSTATE_END_OF_LIST()             \
> +        }                                     \
> +    }
> 
>  int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id);
> 

Looks reasonable as a first step.

Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
diff mbox

Patch

diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 7ed06ea..7322018 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -1444,6 +1444,12 @@  void virtio_save(VirtIODevice *vdev, QEMUFile *f)
     vmstate_save_state(f, &vmstate_virtio, vdev, NULL);
 }
 
+/* A wrapper for use as a VMState .put function */
+void virtio_vmstate_save(QEMUFile *f, void *opaque, size_t size)
+{
+    virtio_save(VIRTIO_DEVICE(opaque), f);
+}
+
 static int virtio_set_features_nocheck(VirtIODevice *vdev, uint64_t val)
 {
     VirtioDeviceClass *k = VIRTIO_DEVICE_GET_CLASS(vdev);
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 96b581d..b6887e7 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -167,6 +167,26 @@  bool virtio_should_notify(VirtIODevice *vdev, VirtQueue *vq);
 void virtio_notify(VirtIODevice *vdev, VirtQueue *vq);
 
 void virtio_save(VirtIODevice *vdev, QEMUFile *f);
+void virtio_vmstate_save(QEMUFile *f, void *opaque, size_t size);
+
+#define VMSTATE_VIRTIO_DEVICE(devname, v, getf, putf) \
+    static const VMStateDescription vmstate_virtio_ ## devname = { \
+        .name = "virtio-" #devname ,          \
+        .minimum_version_id = v,              \
+        .version_id = v,                      \
+        .fields = (VMStateField[]) {          \
+            {                                 \
+                .name = "virtio",             \
+                .info = &(const VMStateInfo) {\
+                        .name = "virtio",     \
+                        .get = getf,          \
+                        .put = putf,          \
+                    },                        \
+                .flags = VMS_SINGLE,          \
+            },                                \
+            VMSTATE_END_OF_LIST()             \
+        }                                     \
+    }
 
 int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id);