All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers
@ 2017-05-24  8:55 Juan Quintela
  2017-05-24  8:55 ` [Qemu-devel] [PATCH 1/3] migration: Use savevm_handlers instead of loadvm copy Juan Quintela
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Juan Quintela @ 2017-05-24  8:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: dgilbert, lvivier, peterx

Hi

We just have a loadvm handlers that are a new list only used in a
single place.  Just move everything to use the savevm_handlers (yes,
it is a list, and we could have a better name).

Once there, vmstate_load() had three arguments but only needs two.  Fix that.

Please, review.

Juan Quintela (3):
  migration: Use savevm_handlers instead of loadvm copy
  migration: loadvm handlers are not used
  migration: Remove section_id parameter from vmstate_load

 include/migration/migration.h |  5 ----
 include/migration/vmstate.h   |  2 --
 include/qemu/typedefs.h       |  1 -
 migration/migration.c         |  2 --
 migration/savevm.c            | 58 ++++++++++++-------------------------------
 5 files changed, 16 insertions(+), 52 deletions(-)

-- 
2.9.3

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

* [Qemu-devel] [PATCH 1/3] migration: Use savevm_handlers instead of loadvm copy
  2017-05-24  8:55 [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers Juan Quintela
@ 2017-05-24  8:55 ` Juan Quintela
  2017-05-24 13:32   ` Laurent Vivier
  2017-05-24  8:55 ` [Qemu-devel] [PATCH 2/3] migration: loadvm handlers are not used Juan Quintela
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Juan Quintela @ 2017-05-24  8:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: dgilbert, lvivier, peterx, Juan Quintela

From: Juan Quintela <quintela@trasno.org>

There is no reason for having the loadvm_handlers at all.  There is
only one use, and we can use the savevm handlers.

We will remove the loadvm handlers on a following patch.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration/savevm.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/migration/savevm.c b/migration/savevm.c
index d971e5e..55ac8c1 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1792,7 +1792,7 @@ struct LoadStateEntry {
  * Returns: true if the footer was good
  *          false if there is a problem (and calls error_report to say why)
  */
-static bool check_section_footer(QEMUFile *f, LoadStateEntry *le)
+static bool check_section_footer(QEMUFile *f, SaveStateEntry *se)
 {
     uint8_t read_mark;
     uint32_t read_section_id;
@@ -1805,15 +1805,15 @@ static bool check_section_footer(QEMUFile *f, LoadStateEntry *le)
     read_mark = qemu_get_byte(f);
 
     if (read_mark != QEMU_VM_SECTION_FOOTER) {
-        error_report("Missing section footer for %s", le->se->idstr);
+        error_report("Missing section footer for %s", se->idstr);
         return false;
     }
 
     read_section_id = qemu_get_be32(f);
-    if (read_section_id != le->section_id) {
+    if (read_section_id != se->section_id) {
         error_report("Mismatched section id in footer for %s -"
                      " read 0x%x expected 0x%x",
-                     le->se->idstr, read_section_id, le->section_id);
+                     se->idstr, read_section_id, se->section_id);
         return false;
     }
 
@@ -1887,7 +1887,7 @@ qemu_loadvm_section_start_full(QEMUFile *f, MigrationIncomingState *mis)
                      " device '%s'", instance_id, idstr);
         return ret;
     }
-    if (!check_section_footer(f, le)) {
+    if (!check_section_footer(f, se)) {
         return -EINVAL;
     }
 
@@ -1898,29 +1898,29 @@ static int
 qemu_loadvm_section_part_end(QEMUFile *f, MigrationIncomingState *mis)
 {
     uint32_t section_id;
-    LoadStateEntry *le;
+    SaveStateEntry *se;
     int ret;
 
     section_id = qemu_get_be32(f);
 
     trace_qemu_loadvm_state_section_partend(section_id);
-    QLIST_FOREACH(le, &mis->loadvm_handlers, entry) {
-        if (le->section_id == section_id) {
+    QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
+        if (se->section_id == section_id) {
             break;
         }
     }
-    if (le == NULL) {
+    if (se == NULL) {
         error_report("Unknown savevm section %d", section_id);
         return -EINVAL;
     }
 
-    ret = vmstate_load(f, le->se, le->version_id);
+    ret = vmstate_load(f, se, se->version_id);
     if (ret < 0) {
         error_report("error while loading state section id %d(%s)",
-                     section_id, le->se->idstr);
+                     section_id, se->idstr);
         return ret;
     }
-    if (!check_section_footer(f, le)) {
+    if (!check_section_footer(f, se)) {
         return -EINVAL;
     }
 
-- 
2.9.3

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

* [Qemu-devel] [PATCH 2/3] migration: loadvm handlers are not used
  2017-05-24  8:55 [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers Juan Quintela
  2017-05-24  8:55 ` [Qemu-devel] [PATCH 1/3] migration: Use savevm_handlers instead of loadvm copy Juan Quintela
@ 2017-05-24  8:55 ` Juan Quintela
  2017-05-24  8:55 ` [Qemu-devel] [PATCH 3/3] migration: Remove section_id parameter from vmstate_load Juan Quintela
  2017-05-24  9:41 ` [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers Peter Xu
  3 siblings, 0 replies; 7+ messages in thread
From: Juan Quintela @ 2017-05-24  8:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: dgilbert, lvivier, peterx, Juan Quintela

From: Juan Quintela <quintela@trasno.org>

So we remove all traces of them.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 include/migration/migration.h |  5 -----
 include/migration/vmstate.h   |  2 --
 include/qemu/typedefs.h       |  1 -
 migration/migration.c         |  2 --
 migration/savevm.c            | 28 +---------------------------
 5 files changed, 1 insertion(+), 37 deletions(-)

diff --git a/include/migration/migration.h b/include/migration/migration.h
index 0e807b6..d1a353a 100644
--- a/include/migration/migration.h
+++ b/include/migration/migration.h
@@ -50,8 +50,6 @@ enum mig_rp_message_type {
     MIG_RP_MSG_MAX
 };
 
-typedef QLIST_HEAD(, LoadStateEntry) LoadStateEntry_Head;
-
 /* State for the incoming migration */
 struct MigrationIncomingState {
     QEMUFile *from_src_file;
@@ -89,9 +87,6 @@ struct MigrationIncomingState {
     /* The coroutine we should enter (back) after failover */
     Coroutine *migration_incoming_co;
     QemuSemaphore colo_incoming_sem;
-
-    /* See savevm.c */
-    LoadStateEntry_Head loadvm_handlers;
 };
 
 MigrationIncomingState *migration_incoming_get_current(void);
diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h
index f97411d..6689562 100644
--- a/include/migration/vmstate.h
+++ b/include/migration/vmstate.h
@@ -1020,8 +1020,6 @@ extern const VMStateInfo vmstate_info_qtailq;
 
 #define SELF_ANNOUNCE_ROUNDS 5
 
-void loadvm_free_handlers(MigrationIncomingState *mis);
-
 int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
                        void *opaque, int version_id);
 void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h
index 33a6aa1..51958bf 100644
--- a/include/qemu/typedefs.h
+++ b/include/qemu/typedefs.h
@@ -39,7 +39,6 @@ typedef struct I2SCodec I2SCodec;
 typedef struct ISABus ISABus;
 typedef struct ISADevice ISADevice;
 typedef struct IsaDma IsaDma;
-typedef struct LoadStateEntry LoadStateEntry;
 typedef struct MACAddr MACAddr;
 typedef struct MachineClass MachineClass;
 typedef struct MachineState MachineState;
diff --git a/migration/migration.c b/migration/migration.c
index ad29e53..891a260 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -121,7 +121,6 @@ MigrationIncomingState *migration_incoming_get_current(void)
     if (!once) {
         mis_current.state = MIGRATION_STATUS_NONE;
         memset(&mis_current, 0, sizeof(MigrationIncomingState));
-        QLIST_INIT(&mis_current.loadvm_handlers);
         qemu_mutex_init(&mis_current.rp_mutex);
         qemu_event_init(&mis_current.main_thread_load_event, false);
         once = true;
@@ -134,7 +133,6 @@ void migration_incoming_state_destroy(void)
     struct MigrationIncomingState *mis = migration_incoming_get_current();
 
     qemu_event_destroy(&mis->main_thread_load_event);
-    loadvm_free_handlers(mis);
 }
 
 
diff --git a/migration/savevm.c b/migration/savevm.c
index 55ac8c1..96b7173 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -1779,13 +1779,6 @@ static int loadvm_process_command(QEMUFile *f)
     return 0;
 }
 
-struct LoadStateEntry {
-    QLIST_ENTRY(LoadStateEntry) entry;
-    SaveStateEntry *se;
-    int section_id;
-    int version_id;
-};
-
 /*
  * Read a footer off the wire and check that it matches the expected section
  *
@@ -1821,22 +1814,11 @@ static bool check_section_footer(QEMUFile *f, SaveStateEntry *se)
     return true;
 }
 
-void loadvm_free_handlers(MigrationIncomingState *mis)
-{
-    LoadStateEntry *le, *new_le;
-
-    QLIST_FOREACH_SAFE(le, &mis->loadvm_handlers, entry, new_le) {
-        QLIST_REMOVE(le, entry);
-        g_free(le);
-    }
-}
-
 static int
 qemu_loadvm_section_start_full(QEMUFile *f, MigrationIncomingState *mis)
 {
     uint32_t instance_id, version_id, section_id;
     SaveStateEntry *se;
-    LoadStateEntry *le;
     char idstr[256];
     int ret;
 
@@ -1873,15 +1855,7 @@ qemu_loadvm_section_start_full(QEMUFile *f, MigrationIncomingState *mis)
         return -EINVAL;
     }
 
-    /* Add entry */
-    le = g_malloc0(sizeof(*le));
-
-    le->se = se;
-    le->section_id = section_id;
-    le->version_id = version_id;
-    QLIST_INSERT_HEAD(&mis->loadvm_handlers, le, entry);
-
-    ret = vmstate_load(f, le->se, le->version_id);
+    ret = vmstate_load(f, se, se->version_id);
     if (ret < 0) {
         error_report("error while loading state for instance 0x%x of"
                      " device '%s'", instance_id, idstr);
-- 
2.9.3

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

* [Qemu-devel] [PATCH 3/3] migration: Remove section_id parameter from vmstate_load
  2017-05-24  8:55 [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers Juan Quintela
  2017-05-24  8:55 ` [Qemu-devel] [PATCH 1/3] migration: Use savevm_handlers instead of loadvm copy Juan Quintela
  2017-05-24  8:55 ` [Qemu-devel] [PATCH 2/3] migration: loadvm handlers are not used Juan Quintela
@ 2017-05-24  8:55 ` Juan Quintela
  2017-05-24  9:41 ` [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers Peter Xu
  3 siblings, 0 replies; 7+ messages in thread
From: Juan Quintela @ 2017-05-24  8:55 UTC (permalink / raw)
  To: qemu-devel; +Cc: dgilbert, lvivier, peterx, Juan Quintela

From: Juan Quintela <quintela@trasno.org>

Everything else assumes that we always load a device from its own
savevm handler.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 migration/savevm.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/migration/savevm.c b/migration/savevm.c
index 96b7173..e847a6b 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -721,13 +721,13 @@ void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
     }
 }
 
-static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)
+static int vmstate_load(QEMUFile *f, SaveStateEntry *se)
 {
     trace_vmstate_load(se->idstr, se->vmsd ? se->vmsd->name : "(old)");
     if (!se->vmsd) {         /* Old style */
-        return se->ops->load_state(f, se->opaque, version_id);
+        return se->ops->load_state(f, se->opaque, se->version_id);
     }
-    return vmstate_load_state(f, se->vmsd, se->opaque, version_id);
+    return vmstate_load_state(f, se->vmsd, se->opaque, se->version_id);
 }
 
 static void vmstate_save_old_style(QEMUFile *f, SaveStateEntry *se, QJSON *vmdesc)
@@ -1855,7 +1855,7 @@ qemu_loadvm_section_start_full(QEMUFile *f, MigrationIncomingState *mis)
         return -EINVAL;
     }
 
-    ret = vmstate_load(f, se, se->version_id);
+    ret = vmstate_load(f, se);
     if (ret < 0) {
         error_report("error while loading state for instance 0x%x of"
                      " device '%s'", instance_id, idstr);
@@ -1888,7 +1888,7 @@ qemu_loadvm_section_part_end(QEMUFile *f, MigrationIncomingState *mis)
         return -EINVAL;
     }
 
-    ret = vmstate_load(f, se, se->version_id);
+    ret = vmstate_load(f, se);
     if (ret < 0) {
         error_report("error while loading state section id %d(%s)",
                      section_id, se->idstr);
-- 
2.9.3

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

* Re: [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers
  2017-05-24  8:55 [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers Juan Quintela
                   ` (2 preceding siblings ...)
  2017-05-24  8:55 ` [Qemu-devel] [PATCH 3/3] migration: Remove section_id parameter from vmstate_load Juan Quintela
@ 2017-05-24  9:41 ` Peter Xu
  3 siblings, 0 replies; 7+ messages in thread
From: Peter Xu @ 2017-05-24  9:41 UTC (permalink / raw)
  To: Juan Quintela; +Cc: qemu-devel, dgilbert, lvivier

On Wed, May 24, 2017 at 10:55:16AM +0200, Juan Quintela wrote:
> Hi
> 
> We just have a loadvm handlers that are a new list only used in a
> single place.  Just move everything to use the savevm_handlers (yes,
> it is a list, and we could have a better name).
> 
> Once there, vmstate_load() had three arguments but only needs two.  Fix that.
> 
> Please, review.
> 
> Juan Quintela (3):
>   migration: Use savevm_handlers instead of loadvm copy
>   migration: loadvm handlers are not used
>   migration: Remove section_id parameter from vmstate_load
> 
>  include/migration/migration.h |  5 ----
>  include/migration/vmstate.h   |  2 --
>  include/qemu/typedefs.h       |  1 -
>  migration/migration.c         |  2 --
>  migration/savevm.c            | 58 ++++++++++++-------------------------------
>  5 files changed, 16 insertions(+), 52 deletions(-)
> 
> -- 
> 2.9.3
> 

This series looks nice to me. :-)

Series:

Reviewed-by: Peter Xu <peterx@redhat.com>

Thanks,

-- 
Peter Xu

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

* Re: [Qemu-devel] [PATCH 1/3] migration: Use savevm_handlers instead of loadvm copy
  2017-05-24  8:55 ` [Qemu-devel] [PATCH 1/3] migration: Use savevm_handlers instead of loadvm copy Juan Quintela
@ 2017-05-24 13:32   ` Laurent Vivier
  2017-05-24 14:35     ` Juan Quintela
  0 siblings, 1 reply; 7+ messages in thread
From: Laurent Vivier @ 2017-05-24 13:32 UTC (permalink / raw)
  To: Juan Quintela, qemu-devel; +Cc: dgilbert, peterx, Juan Quintela

On 24/05/2017 10:55, Juan Quintela wrote:
> From: Juan Quintela <quintela@trasno.org>
> 
> There is no reason for having the loadvm_handlers at all.  There is
> only one use, and we can use the savevm handlers.
> 
> We will remove the loadvm handlers on a following patch.
> 
> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  migration/savevm.c | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/migration/savevm.c b/migration/savevm.c
> index d971e5e..55ac8c1 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -1792,7 +1792,7 @@ struct LoadStateEntry {
>   * Returns: true if the footer was good
>   *          false if there is a problem (and calls error_report to say why)
>   */
> -static bool check_section_footer(QEMUFile *f, LoadStateEntry *le)
> +static bool check_section_footer(QEMUFile *f, SaveStateEntry *se)
>  {
>      uint8_t read_mark;
>      uint32_t read_section_id;
> @@ -1805,15 +1805,15 @@ static bool check_section_footer(QEMUFile *f, LoadStateEntry *le)
>      read_mark = qemu_get_byte(f);
>  
>      if (read_mark != QEMU_VM_SECTION_FOOTER) {
> -        error_report("Missing section footer for %s", le->se->idstr);
> +        error_report("Missing section footer for %s", se->idstr);
>          return false;
>      }
>  
>      read_section_id = qemu_get_be32(f);
> -    if (read_section_id != le->section_id) {
> +    if (read_section_id != se->section_id) {
>          error_report("Mismatched section id in footer for %s -"
>                       " read 0x%x expected 0x%x",
> -                     le->se->idstr, read_section_id, le->section_id);
> +                     se->idstr, read_section_id, se->section_id);
>          return false;
>      }
>  
> @@ -1887,7 +1887,7 @@ qemu_loadvm_section_start_full(QEMUFile *f, MigrationIncomingState *mis)
>                       " device '%s'", instance_id, idstr);
>          return ret;
>      }
> -    if (!check_section_footer(f, le)) {
> +    if (!check_section_footer(f, se)) {
>          return -EINVAL;
>      }
>  
> @@ -1898,29 +1898,29 @@ static int
>  qemu_loadvm_section_part_end(QEMUFile *f, MigrationIncomingState *mis)
>  {
>      uint32_t section_id;
> -    LoadStateEntry *le;
> +    SaveStateEntry *se;
>      int ret;
>  
>      section_id = qemu_get_be32(f);
>  
>      trace_qemu_loadvm_state_section_partend(section_id);
> -    QLIST_FOREACH(le, &mis->loadvm_handlers, entry) {
> -        if (le->section_id == section_id) {
> +    QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
> +        if (se->section_id == section_id) {
>              break;
>          }
>      }
> -    if (le == NULL) {
> +    if (se == NULL) {
>          error_report("Unknown savevm section %d", section_id);
>          return -EINVAL;
>      }
>  
> -    ret = vmstate_load(f, le->se, le->version_id);
> +    ret = vmstate_load(f, se, se->version_id);
Are you sure you can replace le->version_id by se->version?

Because according to code in qemu_loadvm_section_start_full(),
we can have le->version_id <= se->version_id.

Thanks,
Laurent

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

* Re: [Qemu-devel] [PATCH 1/3] migration: Use savevm_handlers instead of loadvm copy
  2017-05-24 13:32   ` Laurent Vivier
@ 2017-05-24 14:35     ` Juan Quintela
  0 siblings, 0 replies; 7+ messages in thread
From: Juan Quintela @ 2017-05-24 14:35 UTC (permalink / raw)
  To: Laurent Vivier; +Cc: qemu-devel, dgilbert, peterx

Laurent Vivier <lvivier@redhat.com> wrote:
> On 24/05/2017 10:55, Juan Quintela wrote:
>> From: Juan Quintela <quintela@trasno.org>
>> 
>> There is no reason for having the loadvm_handlers at all.  There is
>> only one use, and we can use the savevm handlers.
>> 
>> We will remove the loadvm handlers on a following patch.
>> 
>> Signed-off-by: Juan Quintela <quintela@redhat.com>


>> +    QTAILQ_FOREACH(se, &savevm_state.handlers, entry) {
>> +        if (se->section_id == section_id) {
>>              break;
>>          }
>>      }
>> -    if (le == NULL) {
>> +    if (se == NULL) {
>>          error_report("Unknown savevm section %d", section_id);
>>          return -EINVAL;
>>      }
>>  
>> -    ret = vmstate_load(f, le->se, le->version_id);
>> +    ret = vmstate_load(f, se, se->version_id);
> Are you sure you can replace le->version_id by se->version?
>
> Because according to code in qemu_loadvm_section_start_full(),
> we can have le->version_id <= se->version_id.

You are right.  We don't use basically anymore version_id, but we used
to use it.

I will arrive to a different solution.  Thanks a lot.

Later, Juan.

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

end of thread, other threads:[~2017-05-24 14:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-24  8:55 [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers Juan Quintela
2017-05-24  8:55 ` [Qemu-devel] [PATCH 1/3] migration: Use savevm_handlers instead of loadvm copy Juan Quintela
2017-05-24 13:32   ` Laurent Vivier
2017-05-24 14:35     ` Juan Quintela
2017-05-24  8:55 ` [Qemu-devel] [PATCH 2/3] migration: loadvm handlers are not used Juan Quintela
2017-05-24  8:55 ` [Qemu-devel] [PATCH 3/3] migration: Remove section_id parameter from vmstate_load Juan Quintela
2017-05-24  9:41 ` [Qemu-devel] [PATCH 0/3] Remove of loadvm handlers Peter Xu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.