From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11023132.outbound.protection.outlook.com [40.107.159.132]) by lore.virtuozzo.com (Postfix) with ESMTPS id 4A8CB80474 for ; Fri, 23 Oct 2026 16:55:18 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DrLcicUyAiQPxUWux61pmUE5+yexBH3G5QauJ1kUc8elAXT6QSQvDFfmpwhrSZBuRvlXYffFYJ7CIG8nk1vpLcVeu68sDR6vO+AJtaTnRyCzMY6e8Wfc87HqT8fy5Z/Z76uarKVeR3ldbhRTtoUNnEqDETcjqCctblys0y1o+O5wDz4Q+3ktJQwqw5pPdYRFRXZnLat1u+Vj2v9zDx4vnO6GzBKXfN2EySuSQWNP9TolYyYvCpG4fGnWa74BB1QQob/WURsnDe41BpIapt0HXL6zviwg4Ph5G6eHC8f7RkJfv9xw5FKNtYu7Hb1yIi+DoGkMplv9nUq8IMx2VITc5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=j9dzQlW2VBqQd3p7AEneckGxnHm5c0FEfUx65AjCl5w=; b=LSBN8cL7PJN+jf6pqMEG0ZzrURONPFVPDbXIQw3evqo4Ouu/IS6m2pcPcdwYlQnbCoyVirxcr3+7lcR3OIDiOmGRtvFfC8LPtiTG6TMBEtVbY3EcgbJfV/mtz2DelFrS+66yrhdE6ht2XfdsEFARHlqy2UQjVLV9ZqQRsBsvIfUExC2zxXicPna/dnSTMXe1xwlwpGx/ywxYARy30ocIw1op2odMROgu+FojkDKsrQRRz4wgMKWB6/oQiKVr0bSQvLM0oFUGGxjmKAcwtcv4Q3qpa6Jy1o+a02JeJdK9L93pgi1ye0BSXzKWsBnnYGd7FJc6gR3PUreD0y683Z1N1g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=j9dzQlW2VBqQd3p7AEneckGxnHm5c0FEfUx65AjCl5w=; b=DBbJqgBoAzm/nipH+FC/2JbvfYJ5PgJYJCSLiG+fCoPoZMjnEiCLuBkyGMzI+l1AvziBsDNkeYLq9HS374nSb4m+7OhVQgJ2/eFO1yUXlQfCDA/tpKdukSo6K0otWy8xxEc3tiCI9LT8AF8hBMnzAT+jIoXuNUErzlsS5jVyf6wZQrfMtouN61plu6X5KoUUm1UhM5Xe6yFXC4QmF+I7QCw1nFNJF7mT0L3E2xObNgz0GOHJujxMERRl+cGyGKRzQy2L69v/+0RMtQxMtEXNCzTVW2qVb9gUb92+vraDFKynvuw3J51PT91rjavczlF+BsytYkfh6dqMfTSvqY9YaQ== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by DU4PR08MB11747.eurprd08.prod.outlook.com (2603:10a6:10:646::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.19; Fri, 23 Oct 2026 16:55:17 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0546.017; Fri, 23 Oct 2026 16:55:17 +0000 From: Andrey Drobyshev Date: Fri, 23 Oct 2026 19:54:01 +0300 Subject: [PATCH QEMU HCI-8.1 v5 24/36] migration/cpr: add cpr_is_in_progress() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261023-vfio_v1-v5-24-ba0bf3c6d122@virtuozzo.com> References: <20261023-vfio_v1-v5-0-ba0bf3c6d122@virtuozzo.com> In-Reply-To: <20261023-vfio_v1-v5-0-ba0bf3c6d122@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR0902CA0027.eurprd09.prod.outlook.com (2603:10a6:802:1::16) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DU4PR08MB11747:EE_ X-MS-Office365-Filtering-Correlation-Id: f51964ba-ff07-4daa-0e5e-08df312653cf X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|23010399003|376014|52116014|3023799007|5113699003|22082099003|18002099003|38350700014|10067099003|5023799004|261022075727099003|261021121427099003|56012099006; X-Microsoft-Antispam-Message-Info: rzXxZShptAE0AKeA9y3/oixFKC2KBLEYNmWe2BYfDChhvCM5FNny9Y+13T1S++2pX5bjIDNaUfdZ+/Z5gFRaJNrQ1WqbNYw2z3+ezV9L70zQZZOR24syv7cXp4Ya8mCE/j6jvTpLp3dWg7BPOBajqRXROnwLIFNhf0C+lq6ILVVtMM5ZncM+kkg65KjTnHFrgBHm1J/jqPNqZcxWS4rrvOIsUcPP9l9K/O/ACVzEWzBlaBkqo5xBcYRMQ6awzmFo9F6usaCRq+VOTKtGmBXEZX6VOvz2K33V2IEAK17Xp/dnrxyAoBFRXg+R/hZuzEzoxiq1epRjSpndPS4mmWt7rEkSCMDEemlNfxa1mOm/jNcAMspw4GuXvC2nMr4SBIaGcIeLkz8ZO/jX1cjsufbZ2Q5Lz33SZC9TZnxDyR/a1Up6msxn9OrC83uAPWI4NQ7brbN+jOziGsmAWrwpUZ6EH1WNSfopb98NVnsIyzLEmmSJoxV/Ckidgjw1XGQoHnNp09+RPACZjwQZNW53ZP1WzOAKK822UdsYLFsmr2yPCKSK/icghJAG30QSeQBApq6ojqiK7AgbZJnlKM1i2OTaQQQPoJzvITRZGNTZj0e8pgtdfGdcyhrLMwRoKac4JUBmOXNhHo97qka755SDynMvxSGz7GrSzXKsHOmu9pFlVBM9Pc+zWAbZcYSyaP+1vje30oLR07AvkoaiFc2b/fZoz+OjKccyZ3gI5XTaIbUXF2Y= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(23010399003)(376014)(52116014)(3023799007)(5113699003)(22082099003)(18002099003)(38350700014)(10067099003)(5023799004)(261022075727099003)(261021121427099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UUFsV0ZhbS9RMUxCSFB0RGw4THh1TXV5UHNGRWtTV2FoZ3UvRkhac1V4T2gr?= =?utf-8?B?TGNNS1NVRm1nbUFzVS9nbFlBM1VEcW5YM0RydSs0ZWl3bnhrRUtyVVNxRS9Z?= =?utf-8?B?NktMWFJPbk43L24yQ1lpeGhxUDFraTZCQUdpQWtTK0syazJxUHBOVkptOFJK?= =?utf-8?B?MlQzaEpSRjZRRk5IS1RDTGN3UG1CbWJ4TktMYU1vcFZFaWZjMzduSnFtUng5?= =?utf-8?B?SDkvMWtXanBPV21lcUtnbXBLVUYzVU1LdDQzM1FLYWk2eHVKUEhMNktyTWtQ?= =?utf-8?B?bmlJZVIwZzZiOEorL2FsZEtNYTJKaVA3MEYwY3lxOU55TWdTbnVmZEszUzJu?= =?utf-8?B?MnJXRy9RSUlZTUZ5ajZiZUhVa1FPSzF6MjF4bGljMUVNRjZsV21scVBvdzgr?= =?utf-8?B?WWs5eU8wV3VNM3F2Mkh3MFFOK2grdUJ1ZUw1Qk04ZVlyZTA2KzdkK2dYYVRv?= =?utf-8?B?QVQ2WlBkN29sblZ4QzA0K3Z1cmt3NzZiV3ZlOEhOb0Z2eTlBdmgyQkd0ajZz?= =?utf-8?B?eENhS21DM3RZMy9uc0U0a3BmNjhpM3o2cFVia2N5RHFpeVpXYWxpTk10VnA4?= =?utf-8?B?WmlwTVM3Nk5CRkU2TmxSU2p2eXVvNmFIVURXZm12TU9IcXVmd1BqM0NQdDdR?= =?utf-8?B?d0gxVVpnbUZva0diRE1rZXk4dERRQi9FYnR0ZVNGTTZuSGEwRzZxU0NNbWl4?= =?utf-8?B?MzVBSHA4UzZ5MWJxSUVFRUFHVUQ1a28vYXo0RWZvZ2NpSkpaRWYxRG9iNSt2?= =?utf-8?B?MnF5SjY0NlgxMUh4OUlGUE5tU2pxQXY3NnBoNGtFUUhmNGMzUnhsNkxjbUZ6?= =?utf-8?B?a3pVWTZGTjFtbjRTdWk5WHFnN01pcVFGNU5ET1h4MnBwUUk2STU2eHRvazNI?= =?utf-8?B?Z2JmYU1KcmwxZ24zdWpPVnIrVUtoVWFHNVhuWnFDYkJOWllxMEVrRXVIZTJS?= =?utf-8?B?akV1bG01Wmp1YzhnTk0xWGxzS2VTOEp5OVZqTmtNRnI1U0dtRW9JNEJacGJY?= =?utf-8?B?eGlPb1poOFlsOEMrY1VlTlB3R295NkZIb2JCNXhTMGFQWHRiTWViQWtNeXgz?= =?utf-8?B?UW9QU0pLSjlFMVVWT05pVkNZTXJkbXNBQjVyZ3N3Si9CTG9zc1c2Mk9mRW5h?= =?utf-8?B?Q3hjUGxod251S3NIOW1sUGNVcnZndzY4Q0JaQ1FmbnRabTZDQ2doRUtGWWsx?= =?utf-8?B?cGthZFZ6WnN6YWRqYVRMZDJPeW1oMHZkcE5CVDI0RktWbWtwaDdPUnB1Njdz?= =?utf-8?B?WCtZRERmUTJtOU05UlB2cEt6QWYxOUtGQTdzdXdnWnNvdDM0WWxSRmRuTjdq?= =?utf-8?B?TWtubVdaSGtyUW9tRWNzWDR3eHI2dHJVa21MOFZnT0hYUUVvbXlpWGN1THF4?= =?utf-8?B?aEFlWnJpSzRpNE1veW1UaHFkVDhKS01HbUp3MUJJZXorOUxsb1I2Z3FaTEtz?= =?utf-8?B?dkVNY1Byd3c0SXFPelp2akZyK1VQTXBoZkQvbndlc1lybzkyYy9xaDN2bWFp?= =?utf-8?B?aW1Fbjl6SjJVSHJVbWtiZ2ZRaFpPYTViNnJYUzZaelp4QmROa2xIY2wrd2hl?= =?utf-8?B?WVdDZE9xTmJqcGFURjF1Y3dmcDMvd3huWXVtd0ZXOVFxK1VJZ2l2Q2pCaW4r?= =?utf-8?B?SkpmUFlybnRPOGNqSjNuVmRxZk9TaGErTHlOVW84ZWhydHlBN3M4RFRFdk5n?= =?utf-8?B?Zlp1UUFZM1M4VENBL1gzQnNib3FMc3BJUjBlSlJJVFg2YkxSSEVSbWE1VlN2?= =?utf-8?B?OWx2cmg5emJZeWJqVFQ1bVZyZDlqdnlReG9kNE5NV0ptazVWWld4WkliQ0N3?= =?utf-8?B?Y3cweGg2d1hmTnFSM3dwc0dmdnBjREdndVNrYk91U3pnY1FOa0VJRFBLL1hr?= =?utf-8?B?Q1d1RkhXeVJZRGt0dm5IdlBUOTZaWjFxU2V6UE0xQWtxTG55TWQwaWh0T1JT?= =?utf-8?B?Q3dlbk9TOUNjekJydS9COEg3YnVLN21RcXl3NUd5RVdFOGRSaFpMUklEblJ2?= =?utf-8?B?MlhwR3NtWU5SM0wyTWN1YkUraXNyUUI5NFJ0dXJMNDdXaklmbW5iVnA0djJ6?= =?utf-8?B?WGJ0SENxVHc3bktSdWU3S1dnUHFRcU5qcmhkSURUUHdQc1JyT0FzaDJMMVZt?= =?utf-8?B?TUVkNTgzSjlkT01peFlDOXN6K3JIdm9xcGxOSlRzb0k4cVYzTWsyQTNFWHlo?= =?utf-8?B?TCtvSlZKS2c4Tk1YZE9IemFXaXdveTZyUzUxeXpYc1Z6cXJqWGhUZUxCdVlR?= =?utf-8?B?Z1NPcTBoVklrbU9sdVNESFpQMGMzT2lPNU53N3NmTmQ3UFE2TEQzalZ1Mjlj?= =?utf-8?B?cFhJbzV4WmJkTTlxME45N3dvV2lQOE5oWlJwQm1jNXdhdytjNDZ4ek5acnox?= =?utf-8?Q?et8o+fzYvwqOI9nU=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f51964ba-ff07-4daa-0e5e-08df312653cf X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2026 16:54:39.7163 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1QB47VXKl9t6GoJ2JanqmjhJre+4kNPntFPfsDxa/DrNXUgbBEk2sUs/Ry8JayLi7pqnTzmVZbOO9IPj/UrYnhyXQqwdnxNqCZDleXy8aDI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR08MB11747 cpr_incoming_needed() only looks at the migration mode. That's fine for vmstate .needed callbacks, which run during a save or load. But code that runs at any time, e.g. VM state change handlers, can't tell from it whether a CPR migration is actually going on: on the source the mode is just a parameter, set by migrate-set-parameters whether or not a migrate follows. Add cpr_is_in_progress(), which is true on the target until the incoming migration is done, and on the source only while the outgoing one runs. Signed-off-by: Andrey Drobyshev --- include/migration/cpr.h | 1 + migration/cpr.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/migration/cpr.h b/include/migration/cpr.h index 4dd397a7c13..e73c5da1d9c 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -64,6 +64,7 @@ MigMode cpr_get_incoming_mode(void); void cpr_set_incoming_mode(MigMode mode); bool cpr_is_incoming(void); bool cpr_exec_is_incoming(void); +bool cpr_is_in_progress(void); bool cpr_state_save(MigrationChannel *channel, Error **errp); int cpr_state_load(MigrationChannel *channel, Error **errp); diff --git a/migration/cpr.c b/migration/cpr.c index a149e790c10..3ea5d86bab4 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -549,6 +549,28 @@ bool cpr_exec_is_incoming(void) return incoming_mode == MIG_MODE_CPR_EXEC; } +bool cpr_is_in_progress(void) +{ + /* The incoming mode on the target, the 'mode' parameter on the source */ + MigMode mode = migrate_mode(); + + if (mode != MIG_MODE_CPR_TRANSFER && mode != MIG_MODE_CPR_EXEC) { + return false; + } + + /* Target: the incoming mode is set until the incoming migration is done */ + if (cpr_is_incoming()) { + return true; + } + + /* + * Source: the parameter alone means nothing, it may just have been set. + * An outgoing CPR migration has the CPR state open, from + * cpr_state_save() to cpr_state_close(). + */ + return cpr_state_file != NULL; +} + bool cpr_state_save(MigrationChannel *channel, Error **errp) { int ret; -- 2.47.1