vl: move global property, migrate init earlier

Currently drive_init_func() may call migrate_get_current() while the
migrate object is still not ready yet at that time. Move the migration
object init earlier, along with the global properties, right after
acceleration init.

This fixes a breakage for iotest 055, which caused an assertion failure.

Reported-by: Max Reitz <mreitz@redhat.com>
Reported-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Tested-by: QingFeng Hao <haoqf@linux.vnet.ibm.com>
Fixes: 3df663 ("migration: move only_migratable to MigrationState")
Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <1499242883-2184-3-git-send-email-peterx@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
Peter Xu 2017-07-05 16:21:21 +08:00 committed by Dr. David Alan Gilbert
parent b605c47b57
commit 00b8ea4e34
1 changed files with 12 additions and 12 deletions

24
vl.c
View File

@ -4418,6 +4418,18 @@ int main(int argc, char **argv, char **envp)
configure_accelerator(current_machine); configure_accelerator(current_machine);
/*
* Register all the global properties, including accel properties,
* machine properties, and user-specified ones.
*/
register_global_properties(current_machine);
/*
* Migration object can only be created after global properties
* are applied correctly.
*/
migration_object_init();
if (qtest_chrdev) { if (qtest_chrdev) {
qtest_init(qtest_chrdev, qtest_log, &error_fatal); qtest_init(qtest_chrdev, qtest_log, &error_fatal);
} }
@ -4601,18 +4613,6 @@ int main(int argc, char **argv, char **envp)
exit (i == 1 ? 1 : 0); exit (i == 1 ? 1 : 0);
} }
/*
* Register all the global properties, including accel properties,
* machine properties, and user-specified ones.
*/
register_global_properties(current_machine);
/*
* Migration object can only be created after global properties
* are applied correctly.
*/
migration_object_init();
/* This checkpoint is required by replay to separate prior clock /* This checkpoint is required by replay to separate prior clock
reading from the other reads, because timer polling functions query reading from the other reads, because timer polling functions query
clock values from the log. */ clock values from the log. */