From nobody Mon Feb 9 02:27:46 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1518087364801135.70236907744106; Thu, 8 Feb 2018 02:56:04 -0800 (PST) Received: from localhost ([::1]:42151 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ejjry-0001uy-Qb for importer@patchew.org; Thu, 08 Feb 2018 05:55:58 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37498) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ejjVr-0007Nd-QG for qemu-devel@nongnu.org; Thu, 08 Feb 2018 05:33:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ejjVm-0005tk-41 for qemu-devel@nongnu.org; Thu, 08 Feb 2018 05:33:07 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:41364 helo=mx1.redhat.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ejjVl-0005tG-St for qemu-devel@nongnu.org; Thu, 08 Feb 2018 05:33:02 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7BAC84040073; Thu, 8 Feb 2018 10:33:00 +0000 (UTC) Received: from xz-mi.nay.redhat.com (dhcp-14-120.nay.redhat.com [10.66.14.120]) by smtp.corp.redhat.com (Postfix) with ESMTP id 327262166BAE; Thu, 8 Feb 2018 10:32:56 +0000 (UTC) From: Peter Xu To: qemu-devel@nongnu.org Date: Thu, 8 Feb 2018 18:31:31 +0800 Message-Id: <20180208103132.28452-28-peterx@redhat.com> In-Reply-To: <20180208103132.28452-1-peterx@redhat.com> References: <20180208103132.28452-1-peterx@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Thu, 08 Feb 2018 10:33:00 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Thu, 08 Feb 2018 10:33:00 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'peterx@redhat.com' RCPT:'' X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.187.233.73 Subject: [Qemu-devel] [PATCH v6 27/28] migration/qmp: add command migrate-pause X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Andrea Arcangeli , Juan Quintela , Alexey Perevalov , peterx@redhat.com, "Dr . David Alan Gilbert" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" It pauses an ongoing migration. Currently it only supports postcopy. Note that this command will work on either side of the migration. Basically when we trigger this on one side, it'll interrupt the other side as well since the other side will get notified on the disconnect event. However, it's still possible that the other side is not notified, for example, when the network is totally broken, or due to some firewall configuration changes. In that case, we will also need to run the same command on the other side so both sides will go into the paused state. Signed-off-by: Peter Xu --- migration/migration.c | 27 +++++++++++++++++++++++++++ qapi/migration.json | 16 ++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/migration/migration.c b/migration/migration.c index bb57ed9ade..139abec0c3 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1448,6 +1448,33 @@ void qmp_migrate_recover(const char *uri, Error **er= rp) qemu_start_incoming_migration(uri, errp); } =20 +void qmp_migrate_pause(Error **errp) +{ + MigrationState *ms =3D migrate_get_current(); + MigrationIncomingState *mis =3D migration_incoming_get_current(); + int ret; + + if (ms->state =3D=3D MIGRATION_STATUS_POSTCOPY_ACTIVE) { + /* Source side, during postcopy */ + ret =3D qemu_file_shutdown(ms->to_dst_file); + if (ret) { + error_setg(errp, "Failed to pause source migration"); + } + return; + } + + if (mis->state =3D=3D MIGRATION_STATUS_POSTCOPY_ACTIVE) { + ret =3D qemu_file_shutdown(mis->from_src_file); + if (ret) { + error_setg(errp, "Failed to pause destination migration"); + } + return; + } + + error_setg(errp, "migrate-pause is currently only supported " + "during postcopy-active state"); +} + bool migration_is_blocked(Error **errp) { if (qemu_savevm_state_blocked(errp)) { diff --git a/qapi/migration.json b/qapi/migration.json index dfbcb02d4c..3d9cfeb8f1 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -1192,3 +1192,19 @@ ## { 'command': 'migrate-recover', 'data': { 'uri': 'str' }, 'allow-oob': true } + +## +# @migrate-pause: +# +# Pause a migration. Currently it only supports postcopy. +# +# Returns: nothing. +# +# Example: +# +# -> { "execute": "migrate-pause" } +# <- { "return": {} } +# +# Since: 2.12 +## +{ 'command': 'migrate-pause', 'allow-oob': true } --=20 2.14.3