From nobody Fri Nov 14 21:05:51 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1760118259; cv=none; d=zohomail.com; s=zohoarc; b=n5uotydz+7BzfpoiV0hNh3KchTXb+wFtz5ncMhwSZQaRT2laRPU9yOmQNePCstc/zQxrpZz31AYjUEKCtL038FcBHOjw86M3mbeRkJCSCGV5D2sItuO8kdbZSD+wb6AIuB3bYwrXYURFSLypmwwCKpSvsOM0epntaqZoqrtRANY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760118259; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1aqdMYqp8Yx3D93m6Dm+Tvka8wXxuYClFadXubXeNIY=; b=SNhOQH3kI87rAtIWvB21ePrYwhu1GAZY9I607rLQOx1v6wSAmm6T4rnqrbaTdyzm7BsoJ1ybLfys8nIiMrHwcQZkVmJk+6txVvhBzRqKJWXzqLxHa3SkvpJGmLj7Yi9e83eGjKgIH9BEPk4++qXeCa0mu4W8d5FoRvMSzUXXaY0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760118259102898.856841195559; Fri, 10 Oct 2025 10:44:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v7H6s-0008Ki-6g; Fri, 10 Oct 2025 13:40:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v7H6j-0008Is-Tt for qemu-devel@nongnu.org; Fri, 10 Oct 2025 13:40:47 -0400 Received: from forwardcorp1d.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v7H6K-0007U4-N1 for qemu-devel@nongnu.org; Fri, 10 Oct 2025 13:40:45 -0400 Received: from mail-nwsmtp-smtp-corp-main-80.iva.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-80.iva.yp-c.yandex.net [IPv6:2a02:6b8:c0c:9297:0:640:61e7:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id 86D9A80788; Fri, 10 Oct 2025 20:40:14 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:a89::1:23]) by mail-nwsmtp-smtp-corp-main-80.iva.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id xdPFQ30FtmI0-1TSMwjXk; Fri, 10 Oct 2025 20:40:14 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1760118014; bh=1aqdMYqp8Yx3D93m6Dm+Tvka8wXxuYClFadXubXeNIY=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=uvyvv/Elp4Xgz+ahERpkn+mL6JkVOqwdH8TMCD3d2GpE92mwJ5xv3+j+0cewVzzKx gFxagQao6/vyPtt59xoIMxM64sYewN92qhN2BzH9otXSmlI7/goL4hbWaQCcZfVEnN IokKEkYlRrHzn8Kfa/gMrFomGlqKwusQi7a3J9TU= Authentication-Results: mail-nwsmtp-smtp-corp-main-80.iva.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: mst@redhat.com, jasowang@redhat.com Cc: peterx@redhat.com, farosas@suse.de, sw@weilnetz.de, eblake@redhat.com, armbru@redhat.com, thuth@redhat.com, philmd@linaro.org, berrange@redhat.com, qemu-devel@nongnu.org, michael.roth@amd.com, steven.sistare@oracle.com, leiyang@redhat.com, davydov-max@yandex-team.ru, yc-core@yandex-team.ru, vsementsov@yandex-team.ru, raphael.s.norwitz@gmail.com Subject: [PATCH v7 14/19] migration: introduce .pre_incoming() vmsd handler Date: Fri, 10 Oct 2025 20:39:52 +0300 Message-ID: <20251010173957.166759-15-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251010173957.166759-1-vsementsov@yandex-team.ru> References: <20251010173957.166759-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1760118265032158500 Content-Type: text/plain; charset="utf-8" Add possibility for devices to hook into top of migrate-incoming QMP command. It's a place, where migration capabilities and parameters are already set, but migration downtime is not yet started (source is still running). So here devices may do some remaining initializations dependent on migration capabilities. This will be used in further commit to support backend-transfer migration feature for vhost-user-blk. Signed-off-by: Vladimir Sementsov-Ogievskiy Acked-by: Peter Xu --- include/migration/vmstate.h | 1 + migration/migration.c | 4 ++++ migration/savevm.c | 15 +++++++++++++++ migration/savevm.h | 1 + 4 files changed, 21 insertions(+) diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 63ccaee07a..f243518fb5 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -217,6 +217,7 @@ struct VMStateDescription { int version_id; int minimum_version_id; MigrationPriority priority; + bool (*pre_incoming)(void *opaque, Error **errp); int (*pre_load)(void *opaque); int (*pre_load_errp)(void *opaque, Error **errp); int (*post_load)(void *opaque, int version_id); diff --git a/migration/migration.c b/migration/migration.c index a63b46bbef..6ed6a10f57 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -1983,6 +1983,10 @@ void qmp_migrate_incoming(const char *uri, bool has_= channels, return; } =20 + if (!qemu_pre_incoming(errp)) { + return; + } + if (!yank_register_instance(MIGRATION_YANK_INSTANCE, errp)) { return; } diff --git a/migration/savevm.c b/migration/savevm.c index 7b35ec4dd0..6e240ea100 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1268,6 +1268,21 @@ bool qemu_savevm_state_blocked(Error **errp) return false; } =20 +bool qemu_pre_incoming(Error **errp) +{ + SaveStateEntry *se; + + QTAILQ_FOREACH(se, &savevm_state.handlers, entry) { + if (se->vmsd && se->vmsd->pre_incoming) { + if (!se->vmsd->pre_incoming(se->opaque, errp)) { + return false; + } + } + } + + return true; +} + void qemu_savevm_non_migratable_list(strList **reasons) { SaveStateEntry *se; diff --git a/migration/savevm.h b/migration/savevm.h index c337e3e3d1..4ad8997f94 100644 --- a/migration/savevm.h +++ b/migration/savevm.h @@ -29,6 +29,7 @@ #define QEMU_VM_COMMAND 0x08 #define QEMU_VM_SECTION_FOOTER 0x7e =20 +bool qemu_pre_incoming(Error **errp); bool qemu_savevm_state_blocked(Error **errp); void qemu_savevm_non_migratable_list(strList **reasons); int qemu_savevm_state_prepare(Error **errp); --=20 2.48.1