VM execution was resumed while migration was still in setup. This was causing a bus error because the userfault thread was waking up VM too early during migration setup.
Signed-off-by: Christian Pinto <c.pi...@virtualopensystems.com> Signed-off-by: Baptiste Reynal <b.rey...@virtualopensystems.com> --- migration/migration.c | 9 +++++---- migration/postcopy-ram.c | 14 -------------- 2 files changed, 5 insertions(+), 18 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index f6d68ca020..19e8da1f84 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1894,15 +1894,16 @@ static void *snapshot_thread(void *opaque) postcopy_ram_enable_notify(&ms->userfault_state, UFFDIO_REGISTER_MODE_WP); buffer = qemu_save_device_buffer(); + migrate_set_state(&ms->state, MIGRATION_STATUS_SETUP, + MIGRATION_STATUS_ACTIVE); + + trace_snapshot_thread_setup_complete(); + if (old_vm_running) { vm_start(); } qemu_mutex_unlock_iothread(); - migrate_set_state(&ms->state, MIGRATION_STATUS_SETUP, MIGRATION_STATUS_ACTIVE); - - trace_snapshot_thread_setup_complete(); - while (qemu_file_get_error(ms->to_dst_file) == 0) { if (qemu_savevm_state_iterate(ms->to_dst_file, false) > 0) { break; diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index 97382067b3..6252eb379a 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -551,20 +551,6 @@ static void *postcopy_ram_fault_thread(void *opaque) break; } - /* Note: In the setup process, snapshot_thread may modify VM's - * write-protected pages, we should not block it there, or there - * will be an deadlock error. - */ - if (migration_in_setup(ms)) { - ram_addr_t host = msg.arg.pagefault.address; - - host &= ~(hostpagesize - 1); - ret = ram_set_pages_wp(host, hostpagesize, true, - us->userfault_fd); - if (ret < 0) { - error_report("Remove page's write-protect failed"); - } - } } } trace_postcopy_ram_fault_thread_exit(); -- 2.11.0