mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-10-15 07:22:46 +00:00
Postcopy: Send events/change state on incoming side
I missed the calls to send migration events on the destination side as we enter postcopy. Take care when adding them not to do it after state has been freed. Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: zhanghailiang <zhang.zhanghailiang@huawei.com> Reviewed-by: Juan Quintela <quintela@redhat.com> Reviewed-by: Amit Shah <amit.shah@redhat.com> Message-Id: <1450266458-3178-4-git-send-email-dgilbert@redhat.com> Signed-off-by: Amit Shah <amit.shah@redhat.com>
This commit is contained in:
parent
93d7af6ff0
commit
6ba996bb45
|
@ -1399,6 +1399,8 @@ static void *postcopy_ram_listen_thread(void *opaque)
|
||||||
MigrationIncomingState *mis = migration_incoming_get_current();
|
MigrationIncomingState *mis = migration_incoming_get_current();
|
||||||
int load_res;
|
int load_res;
|
||||||
|
|
||||||
|
migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
|
||||||
|
MIGRATION_STATUS_POSTCOPY_ACTIVE);
|
||||||
qemu_sem_post(&mis->listen_thread_sem);
|
qemu_sem_post(&mis->listen_thread_sem);
|
||||||
trace_postcopy_ram_listen_thread_start();
|
trace_postcopy_ram_listen_thread_start();
|
||||||
|
|
||||||
|
@ -1415,6 +1417,8 @@ static void *postcopy_ram_listen_thread(void *opaque)
|
||||||
if (load_res < 0) {
|
if (load_res < 0) {
|
||||||
error_report("%s: loadvm failed: %d", __func__, load_res);
|
error_report("%s: loadvm failed: %d", __func__, load_res);
|
||||||
qemu_file_set_error(f, load_res);
|
qemu_file_set_error(f, load_res);
|
||||||
|
migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_ACTIVE,
|
||||||
|
MIGRATION_STATUS_FAILED);
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* This looks good, but it's possible that the device loading in the
|
* This looks good, but it's possible that the device loading in the
|
||||||
|
@ -1424,13 +1428,6 @@ static void *postcopy_ram_listen_thread(void *opaque)
|
||||||
qemu_event_wait(&mis->main_thread_load_event);
|
qemu_event_wait(&mis->main_thread_load_event);
|
||||||
}
|
}
|
||||||
postcopy_ram_incoming_cleanup(mis);
|
postcopy_ram_incoming_cleanup(mis);
|
||||||
/*
|
|
||||||
* If everything has worked fine, then the main thread has waited
|
|
||||||
* for us to start, and we're the last use of the mis.
|
|
||||||
* (If something broke then qemu will have to exit anyway since it's
|
|
||||||
* got a bad migration state).
|
|
||||||
*/
|
|
||||||
migration_incoming_state_destroy();
|
|
||||||
|
|
||||||
if (load_res < 0) {
|
if (load_res < 0) {
|
||||||
/*
|
/*
|
||||||
|
@ -1442,6 +1439,17 @@ static void *postcopy_ram_listen_thread(void *opaque)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
migrate_set_state(&mis->state, MIGRATION_STATUS_POSTCOPY_ACTIVE,
|
||||||
|
MIGRATION_STATUS_COMPLETED);
|
||||||
|
/*
|
||||||
|
* If everything has worked fine, then the main thread has waited
|
||||||
|
* for us to start, and we're the last use of the mis.
|
||||||
|
* (If something broke then qemu will have to exit anyway since it's
|
||||||
|
* got a bad migration state).
|
||||||
|
*/
|
||||||
|
migration_incoming_state_destroy();
|
||||||
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue