@@ -1516,6 +1516,32 @@
##
{ 'command': 'start-migration-handler' }
+##
+# @start-migrate-incoming:
+#
+# Force start an incoming migration even in a running VM. This is used by the
+# target VM in guest-assisted migration of a confidential guest.
+#
+# @uri: The Uniform Resource Identifier identifying the source or
+# address to listen on
+#
+# Returns: nothing on success
+#
+# Since: 6.0
+#
+# Notes:
+#
+# The uri format is the same as the -incoming command-line option.
+#
+# Example:
+#
+# -> { "execute": "start-migrate-incoming",
+# "arguments": { "uri": "tcp::4446" } }
+# <- { "return": {} }
+#
+##
+{ 'command': 'start-migrate-incoming', 'data': {'uri': 'str' } }
+
##
# @xen-save-devices-state:
#
@@ -2173,6 +2173,23 @@ void qmp_start_migration_handler(Error **errp)
}
}
+void qmp_start_migrate_incoming(const char *uri, Error **errp)
+{
+ Error *local_err = NULL;
+
+ if (!yank_register_instance(MIGRATION_YANK_INSTANCE, errp)) {
+ return;
+ }
+
+ vm_stop(RUN_STATE_PAUSED);
+ qemu_start_incoming_migration(uri, &local_err);
+
+ if (local_err) {
+ yank_unregister_instance(MIGRATION_YANK_INSTANCE);
+ error_propagate(errp, local_err);
+ }
+}
+
void qmp_migrate_recover(const char *uri, Error **errp)
{
MigrationIncomingState *mis = migration_incoming_get_current();
This command forces a running VM into a migrate-incoming state. When using guest-assisted migration (for confidential guests), the target must be started so that its memory has the necessary code for the migration helper. After it is ready we can start receiving the incoming migration connection. Signed-off-by: Dov Murik <dovmurik@linux.ibm.com> --- qapi/migration.json | 26 ++++++++++++++++++++++++++ migration/migration.c | 17 +++++++++++++++++ 2 files changed, 43 insertions(+)