diff options
Diffstat (limited to 'migration')
| -rw-r--r-- | migration/dirtyrate.c | 5 | ||||
| -rw-r--r-- | migration/migration.c | 4 | ||||
| -rw-r--r-- | migration/multifd.c | 24 | ||||
| -rw-r--r-- | migration/ram.c | 2 |
4 files changed, 22 insertions, 13 deletions
diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c index 8f728d2600..ccb98147e8 100644 --- a/migration/dirtyrate.c +++ b/migration/dirtyrate.c @@ -11,17 +11,12 @@ */ #include "qemu/osdep.h" - #include <zlib.h> #include "qapi/error.h" #include "cpu.h" -#include "qemu/config-file.h" -#include "exec/memory.h" #include "exec/ramblock.h" -#include "exec/target_page.h" #include "qemu/rcu_queue.h" #include "qapi/qapi-commands-migration.h" -#include "migration.h" #include "ram.h" #include "trace.h" #include "dirtyrate.h" diff --git a/migration/migration.c b/migration/migration.c index 3263aa55a9..87a9b59f83 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -365,7 +365,7 @@ int migrate_send_rp_req_pages(MigrationIncomingState *mis, RAMBlock *rb, ram_addr_t start, uint64_t haddr) { void *aligned = (void *)(uintptr_t)(haddr & (-qemu_ram_pagesize(rb))); - bool received; + bool received = false; WITH_QEMU_LOCK_GUARD(&mis->page_request_mutex) { received = ramblock_recv_bitmap_test_byte_offset(rb, start); @@ -3061,6 +3061,8 @@ static void migration_completion(MigrationState *s) qemu_savevm_state_complete_postcopy(s->to_dst_file); trace_migration_completion_postcopy_end_after_complete(); + } else if (s->state == MIGRATION_STATUS_CANCELLING) { + goto fail; } /* diff --git a/migration/multifd.c b/migration/multifd.c index 68b171fb61..45c690aa11 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -739,6 +739,19 @@ static void multifd_tls_outgoing_handshake(QIOTask *task, multifd_channel_connect(p, ioc, err); } +static void *multifd_tls_handshake_thread(void *opaque) +{ + MultiFDSendParams *p = opaque; + QIOChannelTLS *tioc = QIO_CHANNEL_TLS(p->c); + + qio_channel_tls_handshake(tioc, + multifd_tls_outgoing_handshake, + p, + NULL, + NULL); + return NULL; +} + static void multifd_tls_channel_connect(MultiFDSendParams *p, QIOChannel *ioc, Error **errp) @@ -752,14 +765,13 @@ static void multifd_tls_channel_connect(MultiFDSendParams *p, return; } + object_unref(OBJECT(ioc)); trace_multifd_tls_outgoing_handshake_start(ioc, tioc, hostname); qio_channel_set_name(QIO_CHANNEL(tioc), "multifd-tls-outgoing"); - qio_channel_tls_handshake(tioc, - multifd_tls_outgoing_handshake, - p, - NULL, - NULL); - + p->c = QIO_CHANNEL(tioc); + qemu_thread_create(&p->thread, "multifd-tls-handshake-worker", + multifd_tls_handshake_thread, p, + QEMU_THREAD_JOINABLE); } static bool multifd_channel_connect(MultiFDSendParams *p, diff --git a/migration/ram.c b/migration/ram.c index add5396a62..7811cde643 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -3741,7 +3741,7 @@ int ram_dirty_bitmap_reload(MigrationState *s, RAMBlock *block) } if (end_mark != RAMBLOCK_RECV_BITMAP_ENDING) { - error_report("%s: ramblock '%s' end mark incorrect: 0x%"PRIu64, + error_report("%s: ramblock '%s' end mark incorrect: 0x%"PRIx64, __func__, block->idstr, end_mark); ret = -EINVAL; goto out; |