From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11021136.outbound.protection.outlook.com [52.101.70.136]) by lore.virtuozzo.com (Postfix) with ESMTPS id 1D8A8810A3 for ; Mon, 2 Nov 2026 10:36:39 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=llpcnoub0LVLYNrrdp6W9EVxAjOwZKSqmBY6D+NNCAJEk4UcMQJXn2MkK06gxDD7bEIDe+cQrLhsfGHXWoswjYy2KWKS8PScE3E2+z7hUWEFhZdAbi95Loobt8FkJ39hTXTdITDtrPd1Zqd7Z0gMXQCeZC1HHgNfvfzHV7PlYhqxtzONgWYIdpJbuhYMtbqjJAHOu/Uv4HKTyBxEUmDcOZZZk6Zqwdq/ugPeo+DztuXsKvnaqnDQc5zbGHnwsI0W6mNO0NWt1wVGl/qUBr62hia65hhhCavltBEvhv54BGtAswbC2/b9lJYI52j+vbjQXDVNT8eShRMH8ao4wGdqeg== 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=Gj1z6c/fmo55KMh+enfzMdp9OpNpXYTE1C/kuHaO1kFvCtcAOZdO5Xa/9BIqJd4D4W3xKp10eXRwe4AoSoEoscK3dLpdXon/g/YKgFNn3umW48xJ/w2q0Ja+XTJjtvBWhHMN/la+lkv6umZOYzpAUmaVnz2Gm5SwRQoGqsWofvhv5l+Ux9NiGZ9P9aizNunI7tVWe//ehoVvOF63moOEbRrN8pcpKo0ym36t8gQveIZHTAOxi8AmxQt58bbAhRAfwbeA8VebIMLsnI8RK6KKD41t219IiCYfvpH78XS8CiTY/RFrsZMPBZoNiWemQs8zMWxmzEjxLryBtAYBpJEIog== 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=kUJKjjTBfzBQRgj36Uib9JKVSsrnWZPzowJWkr9m5WIoyB3EL/uZbuXZ7f8JbjMiTTczO7nmpgpqIYH8QhE4mJR7qn7gesLuIlvZNadG2djUkHu/UNzXzK7+cEpmCku2EN+Z7JuEovf6vDkft07xfv+uPnQwZVTIlGGu4++Fc2amCd6mJIi/ZbAXMQ1BOMoh1NnqYtCEZtWNFf+aEvkXfFcjZye/Q40GWrv9FubmXczE4IXISZzhVOVsU8bQFRbo9G9LQPlOMowNwEX2bYInHRUmP+5f/emIGiel9tXwNFbyIf/TclipMN+P7f0BgtYxrICFFTlHgn91UXBHjrd0gg== 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 DB4PR08MB8199.eurprd08.prod.outlook.com (2603:10a6:10:381::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.12; Mon, 2 Nov 2026 10:36:37 +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.0569.011; Mon, 2 Nov 2026 10:36:37 +0000 From: Andrey Drobyshev Date: Mon, 02 Nov 2026 12:36:39 +0200 Subject: [PATCH QEMU HCI-8.1 v6 24/34] migration/cpr: add cpr_is_in_progress() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261102-vfio_v1-v6-24-9bc7cabc850d@virtuozzo.com> References: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> In-Reply-To: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VIVP296CA0048.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:353::18) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB4PR08MB8199:EE_ X-MS-Office365-Filtering-Correlation-Id: 7e4e0086-01bb-41ea-9446-08df38cd2871 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|1800799024|366016|23010399003|52116014|376014|38350700014|5023799004|56012099006|261026121527099003|261021121427099003|261022075727099003|10067099003|18002099003|22082099003|5113699003|3023799007; X-Microsoft-Antispam-Message-Info: 1uOMBFdOO0NPyeut224C+iImqdQCXYYZgk4ETNUFWE8XP30JL06SKq/j7hzI9K7xb79vXR1I8/SP3fszVxVl9HxMElJ0KLUzYpuwcKnBTD22wWdZ+GaDmQOE6SUjje//uEdxgirRBjIqFSnFqoucqfNRzsPQPE/Jp5e11cEkR8LexpNBvb8KkaGO4Igy8wtCJ7QVo6WsN3RBZ9sCPT0MdkeXcxxsyZ71tqTXERRvXnqAy2s/nSKoDT8JLDAUuQnIxAnEjdnxPEFubwv772yi6OtRJYqXqiN1q8TFq7SxS+UHq2Qx46qjhN8+Wz5nPlbzo23fEn5k+Y8CRqIxtG0GOwY870XTTAJLRe3Vn7vAuv4PfxNttNpTUQBFkvsuVXHV/V9N/oEuIPgz3hfLl0UtfqS/AFCZ60oBsUjdzpvIhdF0L0a30tOa7a1X6qkBxMANQTUj7hnRHOLfmAM6hcNN7W1OYywfHWw2JeoQ92TZLGuYxxAdmB+ebc76/bb8GJeTKLtkHSJTqTtdlQRELc8MX45++R7CRlSk/iW/vKL0WiUWAlxNg88ftpnZFUZhV96/fyEcO98K2E9lmXmIQJgFnudKRdNK2BXDMlOgEn9uxT2Ptyyty1qwYrena/JJsuqBCE3I+deothxUYTBfI0bqz9lvfZ9qmULv5qOH57FReEgHRgk6sSqm8BWCglMo76jmCd3lyjWBQKdSZWsfcynahupgW+gtHgCK5Q0cnU+ZcRE= 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)(1800799024)(366016)(23010399003)(52116014)(376014)(38350700014)(5023799004)(56012099006)(261026121527099003)(261021121427099003)(261022075727099003)(10067099003)(18002099003)(22082099003)(5113699003)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dzlMdUZWUUFiZ3JQSnAzQXhaSkZRUEw2NTF1Y2gzVzNLTnVxWnNmaUlHSTR1?= =?utf-8?B?K2tXcldNbGpVdTJmakk1STc4dkhyQ0wrakFFVXcvS0V5cGh3b1JhbU1FV3VS?= =?utf-8?B?bHJEY1J3emw5UlpQMnB1RWgwSThVaXk4VjlYZHY4TnlhcUYrUTQrZ2hqT0hM?= =?utf-8?B?aCtLclhlMTJnTlRjcDdoa0hiVUlMemt1UHpFSU1LcVJPM0czYklSR1RoWG1k?= =?utf-8?B?U1NWbkgxc1MyYy9DSGxtOTkzdGE0bFRxckRyMlh3ODlDYXZJSHZTZXYzMDAw?= =?utf-8?B?aXVyUFVFUTZjNXZ3NVNQYWxVa3hXVjRPNDhGTFprYmdxZy8za1hCSDZxdVd0?= =?utf-8?B?d3pEam5lbWhpUnYvL2JXTkY3eWg1dWF3OVI1aCswNUNJSjNvTUNFMWR2dmpZ?= =?utf-8?B?RWYwL0NaakVnM0E0TStVcFpHTWdGaWVvWWY4SE1IRjI4NEhnRWhmSEw1SnFa?= =?utf-8?B?cWE1Rk8wcHdSeVJKUVhuK2xzTmhad0FINGdIR0NEMnlkcXBsdjJFbDNpNmpC?= =?utf-8?B?WlJXUXFVNlI0MEVnS2pNT0FDTjF4YWx2L3BmbXRaZzNvM2Z2QUJ2L1d0U1RQ?= =?utf-8?B?Q0xHR3F1TnQ3ZU1MdWI2NU5XR2Z4Ulo1a3JlSzViRjdnVVBDRXdHa3hkaXYy?= =?utf-8?B?UG51a21NbldVUzI1a0NhZEtuR1RZZVIwZEw3bVRvQlhGUHNKckNuU0l6cjN2?= =?utf-8?B?cVFKa2U2c0JkTzhDRHovalhyenRYMzdHdU9mQ2NJS1EyUENabHZIaEdtMWpW?= =?utf-8?B?T2ViM3lsbnM1TTZXS3pzMGo2QnJiU1pXdEZzRERjWkVtWHl3aTRlZHFaUDZX?= =?utf-8?B?ZnVEODZVY2JBTUdlN3FxUEpEWU92bWN1U2FqUjc0cHFMVzFTTEFOUEU4bHpo?= =?utf-8?B?K0lHbzhuSGdUeDREWmNJVnM3VktmaVRjUzVjenF1TThvVHJZbnNlbWlnRVB2?= =?utf-8?B?c3lMdWhsR1JGZXFwVGhzVWlyQXdYZnBlUldId3hPcmdPQ0srczAwTXBBbVh5?= =?utf-8?B?bm9OQkcrdFRDRTdFSnU3RnlKM2ZwZm5PTmNWQWZlS2VJcG1vS3IxdXU0eU9Y?= =?utf-8?B?azQ1SHRPb0NXaE5WUzRtMDBiTnZ2K0t5NGRJOVNtRDAvMGJNL0JCdTZNRFR6?= =?utf-8?B?UXFyRHphYlNsNExqcGducWtGNldmaXJNTFBQUGdzUnJ6elZDOU4ybXRqaHFT?= =?utf-8?B?T0U1WVRkaWVscnhibVNIejFtcTFDSTlaZ0lFYmRlVWFjbXNpd1lMaGRjdjNv?= =?utf-8?B?NFpCTHAzSXZ5Ykp0Yk9pd1NIMFFETmpHanFBVTVxcGcyd2NKWUFucU5CWTNR?= =?utf-8?B?VWNadlBjcnRxUDE2dlJaL05rWEVGd2FVUGpUczZaZHFLM1JtZzdpbGpwbFNm?= =?utf-8?B?M0xxd1dTNGN3akRaMjhVUDdsQ2RzSkQraVNMYU1Ub0RsY1MzSlZsSFJLYzlO?= =?utf-8?B?MVNxdnQ0eE9XelAramhPazZ5Z1lRbkNqd050NzU4RERCaUVYcU95QzZRQlJJ?= =?utf-8?B?MkFCNXZyOGxQRlRyVFMvRmtsMytoNFMvV3RnNkVLSUlwTFRFQnBFZSs4RGJZ?= =?utf-8?B?OEl0cU9iNjI0WjBCc3dwMERYZTQ2RTl1ODVsSGlGUGZjNzcvV2dYNFRkTkFL?= =?utf-8?B?dWkxaDROSEQ1OHYzL3EyUjVhZWxJb1FoOGpVTXBFN0FNOWRWRWo5akF1NDFn?= =?utf-8?B?VGRPUDhnM3ZiMmFWbzI1cFNhdGlkVVprc2xzQW56YWRPUjNzK2dFOFBDd3JI?= =?utf-8?B?MHFUMlV5RFlLUWJwS2RwaVBMd215clk1OUVyNTRlcGI1bEpFbzNuOTYxQjVS?= =?utf-8?B?MzVIeU1VN2VhayszT2lhMHhuM1VzTzRwVXgzWWlPNGJzRXp0VlZyQ2MrdTJt?= =?utf-8?B?WGJWemVQQTJOY2dHY2ZaVGJIRkNOUytVSkphOUpsS1BGWG4xRU5PaWpGV2xy?= =?utf-8?B?MmxkcitqUmt3d2dObHQwcW83RUEzRXBvdFYzekJvMUdCbkY2eGI2U1lvOXli?= =?utf-8?B?ZWZ4Q1J5bmVyVnhNSWRBWWNwb2wwVm9jRzFkMVNiRGpiL3dEeE8yM212QTVY?= =?utf-8?B?cUgyNnFKMzFFUWI5L3pRQ0NQZ3JjY2h6eURqVjh6cVdtSjY1Wk13b0ptVGlK?= =?utf-8?B?STRmemF5US9Sc0x0OUhOaW5hRGpGN1puM3lUd2ZzSjZ6L2pRbnlhV1pNQlh3?= =?utf-8?B?NVFjQ212WEdsdEw1RjgxQVZsMTdDT1NrM3dNYit6T0FscTVMUmx1VGxreDFC?= =?utf-8?B?QmRZYWhVaHg1aVErak9DbGJ6Y1NFUHpoeGsyMEVockI5U1BGTFJSeFhBelNr?= =?utf-8?B?dzFLTkZPejRqWWU3Qks2S0RNbnhiM0thMzByZ0tlemx2QnNWZFZNem51eTRD?= =?utf-8?Q?ObVEtUP11Tq+80S4=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e4e0086-01bb-41ea-9446-08df38cd2871 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Nov 2026 10:36:30.8812 (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: qsr/Nm41Oyz2s22bPjf/BYehIiRtVHe4HXVYMn2sNmzkhQbsGjfbVehOtwpn7Kabox6YnAOBM+4aIgLj89OpVxJH0k8/hDX7Z9ESL3Pa+w8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB8199 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