da38d5c28e
- kvm-tests-avocado-update-aarch64_virt-test-to-exercise-c.patch [bz#2060839] - kvm-RHEL-only-tests-avocado-Switch-aarch64-tests-from-a5.patch [bz#2060839] - kvm-RHEL-only-AArch64-Drop-unsupported-CPU-types.patch [bz#2060839] - kvm-target-i386-deprecate-CPUs-older-than-x86_64-v2-ABI.patch [bz#2060839] - kvm-target-s390x-deprecate-CPUs-older-than-z14.patch [bz#2060839] - kvm-target-arm-deprecate-named-CPU-models.patch [bz#2060839] - kvm-meson.build-Fix-docker-test-build-alpine-when-includ.patch [bz#1968509] - kvm-QIOChannel-Add-flags-on-io_writev-and-introduce-io_f.patch [bz#1968509] - kvm-QIOChannelSocket-Implement-io_writev-zero-copy-flag-.patch [bz#1968509] - kvm-migration-Add-zero-copy-send-parameter-for-QMP-HMP-f.patch [bz#1968509] - kvm-migration-Add-migrate_use_tls-helper.patch [bz#1968509] - kvm-multifd-multifd_send_sync_main-now-returns-negative-.patch [bz#1968509] - kvm-multifd-Send-header-packet-without-flags-if-zero-cop.patch [bz#1968509] - kvm-multifd-Implement-zero-copy-write-in-multifd-migrati.patch [bz#1968509] - kvm-QIOChannelSocket-Introduce-assert-and-reduce-ifdefs-.patch [bz#1968509] - kvm-QIOChannelSocket-Fix-zero-copy-send-so-socket-flush-.patch [bz#1968509] - kvm-migration-Change-zero_copy_send-from-migration-param.patch [bz#1968509] - kvm-migration-Allow-migrate-recover-to-run-multiple-time.patch [bz#2096143] - Resolves: bz#2060839 (Consider deprecating CPU models like "kvm64" / "qemu64" on RHEL 9) - Resolves: bz#1968509 (Use MSG_ZEROCOPY on QEMU Live Migration) - Resolves: bz#2096143 (The migration port is not released if use it again for recovering postcopy migration)
99 lines
3.5 KiB
Diff
99 lines
3.5 KiB
Diff
From fd6f516a94e635bc42e58448f314db575814a834 Mon Sep 17 00:00:00 2001
|
|
From: Peter Xu <peterx@redhat.com>
|
|
Date: Thu, 31 Mar 2022 11:08:45 -0400
|
|
Subject: [PATCH 18/18] migration: Allow migrate-recover to run multiple times
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
RH-Author: Peter Xu <peterx@redhat.com>
|
|
RH-MergeRequest: 104: migration: Allow migrate-recover to run multiple times
|
|
RH-Commit: [1/1] afd726e54c069ae800e2d01f34e768d6bac7dcb9 (peterx/qemu-kvm)
|
|
RH-Bugzilla: 2096143
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Acked-by: Hanna Reitz <hreitz@redhat.com>
|
|
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
|
|
Previously migration didn't have an easy way to cleanup the listening
|
|
transport, migrate recovery only allows to execute once. That's done with a
|
|
trick flag in postcopy_recover_triggered.
|
|
|
|
Now the facility is already there.
|
|
|
|
Drop postcopy_recover_triggered and instead allows a new migrate-recover to
|
|
release the previous listener transport.
|
|
|
|
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
Message-Id: <20220331150857.74406-8-peterx@redhat.com>
|
|
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
|
|
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
(cherry picked from commit 08401c0426bc1a5ce4609afd1cda5dd39abbf9fa)
|
|
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
---
|
|
migration/migration.c | 13 ++-----------
|
|
migration/migration.h | 1 -
|
|
migration/savevm.c | 3 ---
|
|
3 files changed, 2 insertions(+), 15 deletions(-)
|
|
|
|
diff --git a/migration/migration.c b/migration/migration.c
|
|
index 2a141bfaf3..8fb3eae910 100644
|
|
--- a/migration/migration.c
|
|
+++ b/migration/migration.c
|
|
@@ -2166,11 +2166,8 @@ void qmp_migrate_recover(const char *uri, Error **errp)
|
|
return;
|
|
}
|
|
|
|
- if (qatomic_cmpxchg(&mis->postcopy_recover_triggered,
|
|
- false, true) == true) {
|
|
- error_setg(errp, "Migrate recovery is triggered already");
|
|
- return;
|
|
- }
|
|
+ /* If there's an existing transport, release it */
|
|
+ migration_incoming_transport_cleanup(mis);
|
|
|
|
/*
|
|
* Note that this call will never start a real migration; it will
|
|
@@ -2178,12 +2175,6 @@ void qmp_migrate_recover(const char *uri, Error **errp)
|
|
* to continue using that newly established channel.
|
|
*/
|
|
qemu_start_incoming_migration(uri, errp);
|
|
-
|
|
- /* Safe to dereference with the assert above */
|
|
- if (*errp) {
|
|
- /* Reset the flag so user could still retry */
|
|
- qatomic_set(&mis->postcopy_recover_triggered, false);
|
|
- }
|
|
}
|
|
|
|
void qmp_migrate_pause(Error **errp)
|
|
diff --git a/migration/migration.h b/migration/migration.h
|
|
index c2cabb8a14..fbc8690ec8 100644
|
|
--- a/migration/migration.h
|
|
+++ b/migration/migration.h
|
|
@@ -139,7 +139,6 @@ struct MigrationIncomingState {
|
|
struct PostcopyBlocktimeContext *blocktime_ctx;
|
|
|
|
/* notify PAUSED postcopy incoming migrations to try to continue */
|
|
- bool postcopy_recover_triggered;
|
|
QemuSemaphore postcopy_pause_sem_dst;
|
|
QemuSemaphore postcopy_pause_sem_fault;
|
|
|
|
diff --git a/migration/savevm.c b/migration/savevm.c
|
|
index 02ed94c180..d9076897b8 100644
|
|
--- a/migration/savevm.c
|
|
+++ b/migration/savevm.c
|
|
@@ -2589,9 +2589,6 @@ static bool postcopy_pause_incoming(MigrationIncomingState *mis)
|
|
|
|
assert(migrate_postcopy_ram());
|
|
|
|
- /* Clear the triggered bit to allow one recovery */
|
|
- mis->postcopy_recover_triggered = false;
|
|
-
|
|
/*
|
|
* Unregister yank with either from/to src would work, since ioc behind it
|
|
* is the same
|
|
--
|
|
2.35.3
|
|
|