migration: fix migrate_cancel leads live_migration thread endless loop
commit713f762a316348b00f5a3713b5314c88ab0a5852
authorIvan Ren <renyime@gmail.com>
Tue, 25 Jun 2019 13:18:17 +0000 (25 21:18 +0800)
committerJuan Quintela <quintela@redhat.com>
Wed, 24 Jul 2019 12:46:51 +0000 (24 14:46 +0200)
treeef75edf4f63d222e255d2986186f39216015a260
parentbf8b024372bf8abf5a9f40bfa65eeefad23ff988
migration: fix migrate_cancel leads live_migration thread endless loop

When we 'migrate_cancel' a multifd migration, live_migration thread may
go into endless loop in multifd_send_pages functions.

Reproduce steps:

(qemu) migrate_set_capability multifd on
(qemu) migrate -d url
(qemu) [wait a while]
(qemu) migrate_cancel

Then may get live_migration 100% cpu usage in following stack:

pthread_mutex_lock
qemu_mutex_lock_impl
multifd_send_pages
multifd_queue_page
ram_save_multifd_page
ram_save_target_page
ram_save_host_page
ram_find_and_save_block
ram_find_and_save_block
ram_save_iterate
qemu_savevm_state_iterate
migration_iteration_run
migration_thread
qemu_thread_start
start_thread
clone

Signed-off-by: Ivan Ren <ivanren@tencent.com>
Message-Id: <1561468699-9819-2-git-send-email-ivanren@tencent.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
migration/ram.c