aboutsummaryrefslogtreecommitdiff
path: root/migration
diff options
context:
space:
mode:
authorEric Auger <eric.auger@redhat.com>2020-01-25 18:24:49 +0100
committerJuan Quintela <quintela@redhat.com>2020-01-29 11:28:59 +0100
commita085664f21d80b3bc4d052a8e9c372abba2d6c38 (patch)
treeabddcdeb0eac52b2d159a9f6b53f53aea7ea15e6 /migration
parentd32ca5ad7988328f95db6a26beb374c55154c77b (diff)
migration: Simplify get_qlist
Instead of inserting read elements at the head and then reversing the list, it is simpler to add each element after the previous one. Introduce QLIST_RAW_INSERT_AFTER helper and use it in get_qlist(). Signed-off-by: Eric Auger <eric.auger@redhat.com> Suggested-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'migration')
-rw-r--r--migration/vmstate-types.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/migration/vmstate-types.c b/migration/vmstate-types.c
index 1eee36773a..35e784c9d9 100644
--- a/migration/vmstate-types.c
+++ b/migration/vmstate-types.c
@@ -879,7 +879,7 @@ static int get_qlist(QEMUFile *f, void *pv, size_t unused_size,
/* offset of the QLIST entry in a QLIST element */
size_t entry_offset = field->start;
int version_id = field->version_id;
- void *elm;
+ void *elm, *prev = NULL;
trace_get_qlist(field->name, vmsd->name, vmsd->version_id);
if (version_id > vmsd->version_id) {
@@ -900,9 +900,13 @@ static int get_qlist(QEMUFile *f, void *pv, size_t unused_size,
g_free(elm);
return ret;
}
- QLIST_RAW_INSERT_HEAD(pv, elm, entry_offset);
+ if (!prev) {
+ QLIST_RAW_INSERT_HEAD(pv, elm, entry_offset);
+ } else {
+ QLIST_RAW_INSERT_AFTER(pv, prev, elm, entry_offset);
+ }
+ prev = elm;
}
- QLIST_RAW_REVERSE(pv, elm, entry_offset);
trace_get_qlist_end(field->name, vmsd->name);
return ret;