diff options
author | Wei Yang <richardw.yang@linux.intel.com> | 2019-10-06 08:02:48 +0800 |
---|---|---|
committer | Dr. David Alan Gilbert <dgilbert@redhat.com> | 2019-10-11 14:57:22 +0100 |
commit | 2d49bacda00876736c746ce1fcea006a128bef6b (patch) | |
tree | 2c1f63a48de14b96932342224bc1d85f8e938611 /migration | |
parent | 2a461c2467bb58e034c857e47a4a530bdca22227 (diff) | |
download | qemu-2d49bacda00876736c746ce1fcea006a128bef6b.zip qemu-2d49bacda00876736c746ce1fcea006a128bef6b.tar.gz qemu-2d49bacda00876736c746ce1fcea006a128bef6b.tar.bz2 |
migration/postcopy: postpone setting PostcopyState to END
There are two places to call function postcopy_ram_incoming_cleanup()
postcopy_ram_listen_thread on migration success
loadvm_postcopy_handle_listen one setup failure
On success, the vm will never accept another migration. On failure,
PostcopyState is transited from LISTENING to END and would be checked in
qemu_loadvm_state_main(). If PostcopyState is RUNNING, migration would
be paused and retried.
Currently PostcopyState is set to END in function
postcopy_ram_incoming_cleanup(). With above analysis, we can take this
step out and postpone this till the end of listen thread to indicate the
listen thread is done.
This is a preparation patch for later cleanup.
Signed-off-by: Wei Yang <richardw.yang@linux.intel.com>
Message-Id: <20191006000249.29926-3-richardw.yang@linux.intel.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Fixed up in merge to the 1 parameter postcopy_state_set
Diffstat (limited to 'migration')
-rw-r--r-- | migration/postcopy-ram.c | 2 | ||||
-rw-r--r-- | migration/savevm.c | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index 3a72f7b..a793bad 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -577,8 +577,6 @@ int postcopy_ram_incoming_cleanup(MigrationIncomingState *mis) } } - postcopy_state_set(POSTCOPY_INCOMING_END); - if (mis->postcopy_tmp_page) { munmap(mis->postcopy_tmp_page, mis->largest_page_size); mis->postcopy_tmp_page = NULL; diff --git a/migration/savevm.c b/migration/savevm.c index c62687a..bf3da58 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1837,6 +1837,8 @@ static void *postcopy_ram_listen_thread(void *opaque) rcu_unregister_thread(); mis->have_listen_thread = false; + postcopy_state_set(POSTCOPY_INCOMING_END); + return NULL; } |