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 | 16 | ||||
| -rw-r--r-- | migration/tls.c | 2 | ||||
| -rw-r--r-- | migration/tls.h | 2 |
6 files changed, 37 insertions, 16 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 2da2b622ab..7811cde643 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -3011,6 +3011,18 @@ static void decompress_data_with_multi_threads(QEMUFile *f, qemu_mutex_unlock(&decomp_done_lock); } + /* + * we must set ram_bulk_stage to false, otherwise in + * migation_bitmap_find_dirty the bitmap will be unused and + * all the pages in ram cache wil be flushed to the ram of + * secondary VM. + */ +static void colo_init_ram_state(void) +{ + ram_state_init(&ram_state); + ram_state->ram_bulk_stage = false; +} + /* * colo cache: this is for secondary VM, we cache the whole * memory of the secondary VM, it is need to hold the global lock @@ -3054,7 +3066,7 @@ int colo_init_ram_cache(void) } } - ram_state_init(&ram_state); + colo_init_ram_state(); return 0; } @@ -3729,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; diff --git a/migration/tls.c b/migration/tls.c index 66c6f43221..abb149d832 100644 --- a/migration/tls.c +++ b/migration/tls.c @@ -6,7 +6,7 @@ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/migration/tls.h b/migration/tls.h index 0cfbe368ba..de4fe2cafd 100644 --- a/migration/tls.h +++ b/migration/tls.h @@ -6,7 +6,7 @@ * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of |