aboutsummaryrefslogtreecommitdiff
path: root/migration
diff options
context:
space:
mode:
authorFiona Ebner <f.ebner@proxmox.com>2023-05-26 13:59:08 +0200
committerJuan Quintela <quintela@redhat.com>2023-06-02 01:03:19 +0200
commit3a8b81f2e6393828589699bb0b8ef557b9ae5937 (patch)
tree7c91e7b712aab60cdf08bb7516b05036671ff192 /migration
parenta4c6275aa11f153a6a7e614dd867c62b904f8838 (diff)
downloadqemu-3a8b81f2e6393828589699bb0b8ef557b9ae5937.zip
qemu-3a8b81f2e6393828589699bb0b8ef557b9ae5937.tar.gz
qemu-3a8b81f2e6393828589699bb0b8ef557b9ae5937.tar.bz2
migration: stop tracking ram writes when cancelling background migration
Currently, it is only done when the iteration finishes successfully. Not cleaning up the userfaultfd write protection can lead to symptoms/issues such as the process hanging in memmove or GDB not being able to attach. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Message-Id: <20230526115908.196171-1-f.ebner@proxmox.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'migration')
-rw-r--r--migration/migration.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/migration/migration.c b/migration/migration.c
index 7c3425c..dc05c6f 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -2400,13 +2400,6 @@ static void bg_migration_completion(MigrationState *s)
{
int current_active_state = s->state;
- /*
- * Stop tracking RAM writes - un-protect memory, un-register UFFD
- * memory ranges, flush kernel wait queues and wake up threads
- * waiting for write fault to be resolved.
- */
- ram_write_tracking_stop();
-
if (s->state == MIGRATION_STATUS_ACTIVE) {
/*
* By this moment we have RAM content saved into the migration stream.
@@ -2788,6 +2781,13 @@ static void migration_iteration_finish(MigrationState *s)
static void bg_migration_iteration_finish(MigrationState *s)
{
+ /*
+ * Stop tracking RAM writes - un-protect memory, un-register UFFD
+ * memory ranges, flush kernel wait queues and wake up threads
+ * waiting for write fault to be resolved.
+ */
+ ram_write_tracking_stop();
+
qemu_mutex_lock_iothread();
switch (s->state) {
case MIGRATION_STATUS_COMPLETED: