migration: isolate return path on src

There are some places that binded "return path" with postcopy. Let's be
prepared for its usage even without postcopy. This patch mainly did this
on source side.

Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
Peter Xu 2017-05-31 18:35:34 +08:00 committed by Juan Quintela
parent 9bba618f18
commit 0425dc9762
2 changed files with 8 additions and 7 deletions

View File

@ -1857,13 +1857,12 @@ static void migration_completion(MigrationState *s, int current_active_state,
* cleaning everything else up (since if there are no failures * cleaning everything else up (since if there are no failures
* it will wait for the destination to send it's status in * it will wait for the destination to send it's status in
* a SHUT command). * a SHUT command).
* Postcopy opens rp if enabled (even if it's not avtivated)
*/ */
if (migrate_postcopy_ram()) { if (s->rp_state.from_dst_file) {
int rp_error; int rp_error;
trace_migration_completion_postcopy_end_before_rp(); trace_migration_return_path_end_before();
rp_error = await_return_path_close_on_source(s); rp_error = await_return_path_close_on_source(s);
trace_migration_completion_postcopy_end_after_rp(rp_error); trace_migration_return_path_end_after(rp_error);
if (rp_error) { if (rp_error) {
goto fail_invalidate; goto fail_invalidate;
} }
@ -1938,13 +1937,15 @@ static void *migration_thread(void *opaque)
qemu_savevm_state_header(s->to_dst_file); qemu_savevm_state_header(s->to_dst_file);
if (migrate_postcopy_ram()) { if (s->to_dst_file) {
/* Now tell the dest that it should open its end so it can reply */ /* Now tell the dest that it should open its end so it can reply */
qemu_savevm_send_open_return_path(s->to_dst_file); qemu_savevm_send_open_return_path(s->to_dst_file);
/* And do a ping that will make stuff easier to debug */ /* And do a ping that will make stuff easier to debug */
qemu_savevm_send_ping(s->to_dst_file, 1); qemu_savevm_send_ping(s->to_dst_file, 1);
}
if (migrate_postcopy_ram()) {
/* /*
* Tell the destination that we *might* want to do postcopy later; * Tell the destination that we *might* want to do postcopy later;
* if the other end can't do postcopy it should fail now, nice and * if the other end can't do postcopy it should fail now, nice and

View File

@ -88,8 +88,8 @@ migrate_send_rp_message(int msg_type, uint16_t len) "%d: len %d"
migration_completion_file_err(void) "" migration_completion_file_err(void) ""
migration_completion_postcopy_end(void) "" migration_completion_postcopy_end(void) ""
migration_completion_postcopy_end_after_complete(void) "" migration_completion_postcopy_end_after_complete(void) ""
migration_completion_postcopy_end_before_rp(void) "" migration_return_path_end_before(void) ""
migration_completion_postcopy_end_after_rp(int rp_error) "%d" migration_return_path_end_after(int rp_error) "%d"
migration_thread_after_loop(void) "" migration_thread_after_loop(void) ""
migration_thread_file_err(void) "" migration_thread_file_err(void) ""
migration_thread_setup_complete(void) "" migration_thread_setup_complete(void) ""