[PATCH 01/10] migration: Introduce qemu_savevm_send_* helpers

Peter Xu posted 10 patches 3 days, 11 hours ago
Maintainers: Hailiang Zhang <zhanghailiang@xfusion.com>, Peter Xu <peterx@redhat.com>, Fabiano Rosas <farosas@suse.de>, Markus Armbruster <armbru@redhat.com>
[PATCH 01/10] migration: Introduce qemu_savevm_send_* helpers
Posted by Peter Xu 3 days, 11 hours ago
Split qemu_savevm_state_header() into two parts.   This paves way for a
reuse elsewhere.

Signed-off-by: Peter Xu <peterx@redhat.com>
---
 migration/savevm.h |  1 +
 migration/savevm.c | 58 +++++++++++++++++++++++++++-------------------
 2 files changed, 35 insertions(+), 24 deletions(-)

diff --git a/migration/savevm.h b/migration/savevm.h
index 125a2507b7..5d815af742 100644
--- a/migration/savevm.h
+++ b/migration/savevm.h
@@ -37,6 +37,7 @@ int qemu_savevm_state_prepare(Error **errp);
 int qemu_savevm_state_setup(QEMUFile *f, Error **errp);
 bool qemu_savevm_state_guest_unplug_pending(void);
 int qemu_savevm_state_resume_prepare(MigrationState *s);
+void qemu_savevm_send_header(QEMUFile *f);
 void qemu_savevm_state_header(QEMUFile *f);
 int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy);
 void qemu_savevm_state_cleanup(void);
diff --git a/migration/savevm.c b/migration/savevm.c
index 3dc812a7bb..e26656cca3 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1282,38 +1282,48 @@ void qemu_savevm_non_migratable_list(strList **reasons)
     }
 }
 
-void qemu_savevm_state_header(QEMUFile *f)
+void qemu_savevm_send_header(QEMUFile *f)
 {
-    MigrationState *s = migrate_get_current();
-    JSONWriter *vmdesc = s->vmdesc;
-    Error *local_err = NULL;
-
     trace_savevm_state_header();
     qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
     qemu_put_be32(f, QEMU_VM_FILE_VERSION);
+}
 
-    if (s->send_configuration) {
-        qemu_put_byte(f, QEMU_VM_CONFIGURATION);
+static void qemu_savevm_send_configuration(MigrationState *s, QEMUFile *f)
+{
+    JSONWriter *vmdesc = s->vmdesc;
+    Error *local_err = NULL;
 
-        if (vmdesc) {
-            /*
-             * This starts the main json object and is paired with the
-             * json_writer_end_object in
-             * qemu_savevm_state_complete_precopy_non_iterable
-             */
-            json_writer_start_object(vmdesc, NULL);
-            json_writer_start_object(vmdesc, "configuration");
-        }
+    qemu_put_byte(f, QEMU_VM_CONFIGURATION);
 
-        vmstate_save_state(f, &vmstate_configuration, &savevm_state,
-                           vmdesc, &local_err);
-        if (local_err) {
-            error_report_err(local_err);
-        }
+    if (vmdesc) {
+        /*
+         * This starts the main json object and is paired with the
+         * json_writer_end_object in
+         * qemu_savevm_state_complete_precopy_non_iterable
+         */
+        json_writer_start_object(vmdesc, NULL);
+        json_writer_start_object(vmdesc, "configuration");
+    }
 
-        if (vmdesc) {
-            json_writer_end_object(vmdesc);
-        }
+    vmstate_save_state(f, &vmstate_configuration, &savevm_state,
+                       vmdesc, &local_err);
+    if (local_err) {
+        error_report_err(local_err);
+    }
+
+    if (vmdesc) {
+        json_writer_end_object(vmdesc);
+    }
+}
+
+void qemu_savevm_state_header(QEMUFile *f)
+{
+    MigrationState *s = migrate_get_current();
+
+    qemu_savevm_send_header(f);
+    if (s->send_configuration) {
+        qemu_savevm_send_configuration(s, f);
     }
 }
 
-- 
2.50.1
Re: [PATCH 01/10] migration: Introduce qemu_savevm_send_* helpers
Posted by Fabiano Rosas 1 day, 20 hours ago
Peter Xu <peterx@redhat.com> writes:

> Split qemu_savevm_state_header() into two parts.   This paves way for a
> reuse elsewhere.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  migration/savevm.h |  1 +
>  migration/savevm.c | 58 +++++++++++++++++++++++++++-------------------
>  2 files changed, 35 insertions(+), 24 deletions(-)
>
> diff --git a/migration/savevm.h b/migration/savevm.h
> index 125a2507b7..5d815af742 100644
> --- a/migration/savevm.h
> +++ b/migration/savevm.h
> @@ -37,6 +37,7 @@ int qemu_savevm_state_prepare(Error **errp);
>  int qemu_savevm_state_setup(QEMUFile *f, Error **errp);
>  bool qemu_savevm_state_guest_unplug_pending(void);
>  int qemu_savevm_state_resume_prepare(MigrationState *s);
> +void qemu_savevm_send_header(QEMUFile *f);
>  void qemu_savevm_state_header(QEMUFile *f);
>  int qemu_savevm_state_iterate(QEMUFile *f, bool postcopy);
>  void qemu_savevm_state_cleanup(void);
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 3dc812a7bb..e26656cca3 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -1282,38 +1282,48 @@ void qemu_savevm_non_migratable_list(strList **reasons)
>      }
>  }
>  
> -void qemu_savevm_state_header(QEMUFile *f)
> +void qemu_savevm_send_header(QEMUFile *f)
>  {
> -    MigrationState *s = migrate_get_current();
> -    JSONWriter *vmdesc = s->vmdesc;
> -    Error *local_err = NULL;
> -
>      trace_savevm_state_header();
>      qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
>      qemu_put_be32(f, QEMU_VM_FILE_VERSION);
> +}
>  
> -    if (s->send_configuration) {
> -        qemu_put_byte(f, QEMU_VM_CONFIGURATION);
> +static void qemu_savevm_send_configuration(MigrationState *s, QEMUFile *f)
> +{
> +    JSONWriter *vmdesc = s->vmdesc;
> +    Error *local_err = NULL;
>  
> -        if (vmdesc) {
> -            /*
> -             * This starts the main json object and is paired with the
> -             * json_writer_end_object in
> -             * qemu_savevm_state_complete_precopy_non_iterable
> -             */
> -            json_writer_start_object(vmdesc, NULL);
> -            json_writer_start_object(vmdesc, "configuration");
> -        }
> +    qemu_put_byte(f, QEMU_VM_CONFIGURATION);
>  
> -        vmstate_save_state(f, &vmstate_configuration, &savevm_state,
> -                           vmdesc, &local_err);
> -        if (local_err) {
> -            error_report_err(local_err);
> -        }
> +    if (vmdesc) {
> +        /*
> +         * This starts the main json object and is paired with the
> +         * json_writer_end_object in
> +         * qemu_savevm_state_complete_precopy_non_iterable
> +         */
> +        json_writer_start_object(vmdesc, NULL);
> +        json_writer_start_object(vmdesc, "configuration");
> +    }
>  
> -        if (vmdesc) {
> -            json_writer_end_object(vmdesc);
> -        }
> +    vmstate_save_state(f, &vmstate_configuration, &savevm_state,
> +                       vmdesc, &local_err);
> +    if (local_err) {
> +        error_report_err(local_err);
> +    }
> +
> +    if (vmdesc) {
> +        json_writer_end_object(vmdesc);
> +    }
> +}
> +
> +void qemu_savevm_state_header(QEMUFile *f)
> +{
> +    MigrationState *s = migrate_get_current();
> +
> +    qemu_savevm_send_header(f);
> +    if (s->send_configuration) {
> +        qemu_savevm_send_configuration(s, f);
>      }
>  }

Reviewed-by: Fabiano Rosas <farosas@suse.de>