From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021128.outbound.protection.outlook.com [40.107.130.128]) by lore.virtuozzo.com (Postfix) with ESMTPS id 7E4F180A83 for ; Tue, 13 Oct 2026 15:28:17 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RPzuuC0xUIWaxyBp1TOub30s4FkfsWIt4ExnjkDDTNshdzsSnr5MFECb0wZu89rwPgZHdz/rUZTRkkFtdEM5me8pDXXbTgcFEhPiUGVXWd/uq8yPu6pOJt0+a8tt1wdjegsoLOgodWVitE0YDYExj9B8/sUTLmzYm47oGMif4U3O00zkx7YNcUTzBGmr/JtH3qbVfgtslDommNlhWZnUoykc2dl4rriSqAJoqEPAFQuJv19tUBp/u+sMmhbqoUJqollimoP+ifkT9d6m1Wj2EFqqst3a3ERysDGb/5bUujXL/qazxt68+TJbzt6mmmbLLOu/a96/h2Fj6h2OztZksQ== 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=5+aEWljX0CpTpNLZG/KDPpwgLD2uMXWLa+pKyLM7iYY=; b=Pgb9Sfu1o+5lSfjk0qe6dJmF61YVd9Ylx2SqitOPFMIBUccQXZJ252jcqVrem5m6JwoeNYHF0k7xVe3joKn/uZJcGFz4sTsfnAmeFfkoCTJqaOBmF+yjQIgWnwNYWwPdbKUIQB5diByZz6z4B7xwILrlRVLOv730E4mN2yK0zZMoBSF3Qvw6D1GszFFsIsiBfNa1n4gXfie1D50ofBNPBHdF4VOcZmca4ThqHqo91m6IMXhRFJ6nSM5WiwLm6aXDf7zTwpHUwzCkxBT8DApx55AdE1Zi4g0goWxdov+5K8irgjg22OzUbJtz5r0fIbYj5vbfmJaJStq/g8pi4C991A== 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=5+aEWljX0CpTpNLZG/KDPpwgLD2uMXWLa+pKyLM7iYY=; b=w11dGjg1HhZOLg4L8FxCPmxXsh5pSH3j4a7l9hELCUZAgwDYwObOWtLe04C63e3Soc3DI57rYHNGU3+e4BFzc4PlZ94Q6ENopHoRDyOdKc9t12kJ4bHphILKHFa/U8XQ0tIHFKT+pvsxd1DdIn1+Aq4KKaU/ehVBP/WDS9DpHF4n0uo5Vc2pklmUHTb3NaTJo5XwS0QkVJeZ91Sz64rMGgV45r0aIGom2m+Sqk6Z/IhZKDVaoEtWZJyWvo0+VpboevsKJHcCpd60ypFe0g2889qsyzi5fNj+GnPkt87KnvmEKDif0fQio+wGhv2kcEhV+sgyHM6iWbFh4sqbtb2M2Q== 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 WA4PR08MB366192.eurprd08.prod.outlook.com (2603:10a6:1d0:30::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.12; Tue, 13 Oct 2026 15:28:16 +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.0522.008; Tue, 13 Oct 2026 15:28:16 +0000 From: Andrey Drobyshev Date: Tue, 13 Oct 2026 18:28:21 +0300 Subject: [PATCH QEMU HCI-8.1 v2 17/24] migration/cpr: add cpr_is_in_progress() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261013-vfio_v1-v2-17-433455c0a294@virtuozzo.com> References: <20261013-vfio_v1-v2-0-433455c0a294@virtuozzo.com> In-Reply-To: <20261013-vfio_v1-v2-0-433455c0a294@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI5PEPF00000939.AUTP296.PROD.OUTLOOK.COM (2603:10a6:808:1::833) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|WA4PR08MB366192:EE_ X-MS-Office365-Filtering-Correlation-Id: abf84f9a-0f85-4664-d86b-08df293e99c2 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|52116014|5113699003|18002099003|22082099003|10067099003|3023799007|5023799004|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: 0PFuUW7elnwjHLELehdDNGwoNw+Ewr8RCWXdR37KqOe3VpQj/BljLFKdoKa3fqyi1bV/cTa3AL5hjMFn6eku2NaZoATxQmyrxrR4IteFeWQDNfzVZb0Jl6B296pyGrdCbNod2vOj9xqCO+HW+tkcDA8Xe5eW/+RSkLS7zNlbamteXBtN+t13SnXcyKQcnhSSIsCgH3YbTqUwCVlTc1tjmIRf+N90I79fpW8ym+nLGUuXflMWqFdYIjx5+jPkLKQbL7kl8JerBx/OZpg2WbZMTGbYS2mC6zW8ZZhmrtWPczy9+R34SzX/FI4fco/cdICD5BGeUxnuAjPTWQOlBVlvxIGJ/DzEar5kH+Pno14f68YjX4AgUMPkCNUtesrVNYEOECcZM3+UykWscsDqDKvGUN2vZaYQXpwxNOmc0JCo+CJxtO89dHKH4KyxJdO4Fuz8kYEIAsYVkMnry+VSVVl1Wj1wyTzn/w/BDYQPD4b90SGE49T6FL7D2AAEsTMqW9CLbv18yIqvflH1FzgL9m7lw+oLGQsoq9eTNSbFyvOAJVcq02MPL6nn9sL+YYks8+ppgtlGjiTRw5+Yt3JbHktnhHTLjm7JKxXi/MsfZ7ntNLauuCy758/cXPFjUpIGEqx2U8nXvHtgsrFkC5+4IiPkGMw3LqLuUR8W3XdOhGF60xWqXD0lzl/XbCYlThrpI3yivR/FIBDVMUMqIQEwXRW7g/OQm9qaMeFBcy9b23uquWs= 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)(23010399003)(376014)(1800799024)(366016)(52116014)(5113699003)(18002099003)(22082099003)(10067099003)(3023799007)(5023799004)(56012099006)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RDE0c1JzN2VPb0VDVjFkUUsxdytYckVzTVRzRDZTaHVOVGFCUnVmRWVrREZR?= =?utf-8?B?SGRMTFFkVU9HMjM2RDFtVmJYdTdESWxYRmdmS2FnUVpOa0F4N0F2cGJkRnND?= =?utf-8?B?RFNZYVBuZ1BNanVwV0xXdmZBaW96ZmNnRXZmenI4MGk4a1lFL0x6Ny9vaE9i?= =?utf-8?B?QW5yYldrRWphcEV5Q2NBQzRMbFNyVmhyNjFkL3BlSzAzV3RKeURibW44dHFH?= =?utf-8?B?OTlXMDhkRzFhZE1tcXRPSG5EMjV0NGN6LzZLaVhCVjd5SlZvYjZJWnkvODQv?= =?utf-8?B?NDZuR2lPdDhuZEJGMXgxV3kzZ1hNTWV4ZTVBZGVONzluaXRhQ1FiVXg0ckhR?= =?utf-8?B?Y0dqZ2ZqekRoM2NQM2t0dWlUUCtjamU0VGxzWlB1T1VIejZYZklZZWR6czRa?= =?utf-8?B?Mml2Qi96aTVZTHpPMURMUElnY0tQWFQ4MklDNmN1SWNlNjBpaGF1VldhZ2Q4?= =?utf-8?B?a3dGL0JPbTQ5dU5lclkwOHRTbGFWbHdXeVBzV0JTZVV5cWtPa3FRQVY4Z0xY?= =?utf-8?B?ajc1YTRHN2xyZzlQZEpRODl0aVBuVTBFNWt0eWsvRWYwRDFQeVIyWDlScnNH?= =?utf-8?B?bGhnQ3dZRm5SUTR1dGJOSktJdDBTaGV2TGh6TnFueUFJME50cHY2OHM2bzlh?= =?utf-8?B?NXJmK0NuL0hKa1dRT1JZb0drYitLdjFsazh6ekI2d2l6bkJkZDQrMUY0djNC?= =?utf-8?B?L3AwNTdhQkI4aHNwaW9Wbmh4K1RYNWlFZmhITWJ3TXNTRHVmM2ppZlZyS0ZF?= =?utf-8?B?OWZhdXYybHpDR0I1amFWTHNSYVNZS2VVQVB3WkNoaGc0cVM2WGtKTzh2QkJX?= =?utf-8?B?Q1JYajUrL29WQUFKQkJWd3o0OUI4MDlrVGpoZXdlc2VKQm42bENoZW41c1hh?= =?utf-8?B?c3lSSlRSNFZkOWwxRjVBU3pBSWJFbnBQTjdXcnFxc2x4U3pLTTBjSmlCQjcy?= =?utf-8?B?dDJSK0N3TkdhYmhvR3Q2WW9vaEJlQ20wb0RPMHhNdWdWZFJZNTRtSzlWd1F4?= =?utf-8?B?N25GUWh1QVQ3OVU5Y2ZQNDRSSzJpZ3Fvelp1dTZQaXJqZHVWWHkrZHRpUmFu?= =?utf-8?B?RVlCZlJEWDZjZ3g2c3pqaWY3enFRcHRKcWlWMHlJUFBNbGpqQTBYZmVRKzk3?= =?utf-8?B?ZnVWazdmWHM1KzNsc2UycHRIRzVzUXNud25pcHNPZmJWVjRjVGt0Tm5kWngx?= =?utf-8?B?MXNGZEpLTGM3RGhRTUJJZW5WSXBrcTNzSE9neGVxak83RWRvb041c0dpR0xi?= =?utf-8?B?YWFMMWpRZFJ4YXpFV3dvQWJjTjdpYUFZK1dRL1NPUWxKallIWHNXdzFWTFZx?= =?utf-8?B?T2Ywck1IZGRlWVRBQmFUR0l5OGpteC9LZ2U0Q0tzaVVvVC9NbExlL25RVENY?= =?utf-8?B?WDhnemlHSWJHeDJkamV5dzZMTUUxOVMwNXg4MDVmdkduYUhKWkRpaFUwK29p?= =?utf-8?B?anMvcHNPNDkwNXlyc2VoNTlDQmVwQ3luV25zeHFWNGRNRkJCSU9KbDNFd2Rq?= =?utf-8?B?MU96b21tVnJrTWhNbFlTRjFUQkpyekNkRlpCUFVEelJtMXFPTWpyTjRoOHBw?= =?utf-8?B?cTJWblFMcXhISDUrb0FoOEJmdXlEdGI2bTQ3dWlFeUo4dWRlakxJMjFBMTQ4?= =?utf-8?B?Lzk4U3JlYVFFR044QlIybCs2SWkrMWxmSG5tQlJwVW9LTzdlNXU1WVVlWEkx?= =?utf-8?B?NUo4NGxuZTJTdGxONjdnZUtqVG5CcUFKVUlRQ3hnS1BhRnI4TzBLZnpiNEUx?= =?utf-8?B?YjZRU2RWeDJ4VmRybTVwREFNNmNUeTNDMzVjQUFUQlVCYTJOb0pBdVh3Y2NG?= =?utf-8?B?L2hqQWdZcFhMVzBSS2RzdittU0xUZlJvTFZLVEE4Vm56YmYxRzIzaTZPaWt1?= =?utf-8?B?WDRML1VmQmJlRnYrN0NnU1FuOVp5RjMxRDJnQy9FbHdpU2l3cUh5OXMvZGhT?= =?utf-8?B?bkFHMUNKMC9KSkkvd3VKM0d6clc4RlFKaUsxK2xWYUI3QW9pR1BMdk1IMkNG?= =?utf-8?B?TE9pNUZLMzIxaGd5UGVHNVp4TkEwNHlGTWlLdVpuV0lUMHl1by9qMmc5U1JS?= =?utf-8?B?aXBpV1d0TkYrL1FUMEwxNXpOYmtySGlwN1RObmZzT3VQSWs4Q2pCYkVERUJU?= =?utf-8?B?SHZYVHA2c1BBVDZaSTJvM2NxZ1V1YmFINWc1MFFLMUNIUkxyaFozYzdtb3dT?= =?utf-8?B?VlRISW9xWkZjZ2JTSlJnc3ZNeTZtaThpZDV0bE95NEtDUW45NDVmbllWVzBl?= =?utf-8?B?cU45cjYxSklMVlhKNG1Vek55aWE2blA0M2lsd1JWelNzdTM0dnM3N2xCaW5a?= =?utf-8?B?N21nQ25xVUVleEt6dndtdHl4OG9kNHQ3MWwreC85SnkwYnlmQVA4UldIbFhJ?= =?utf-8?Q?uM9+6B5kvv3UVwho=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: abf84f9a-0f85-4664-d86b-08df293e99c2 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2026 15:28:15.5786 (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: QwLf39EMekeuycoKJiG1cu26g0pk4vGf8aSV7C5K79nKzmIHuLWaGGYfZBrYTuhloBUbi1QVJ14OjhIkVpNK1YQjjctXa1HO3G+ux8FQs+8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: WA4PR08MB366192 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 | 21 +++++++++++++++++++++ 2 files changed, 22 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..bbfc362de2c 100644 --- a/migration/cpr.c +++ b/migration/cpr.c @@ -549,6 +549,27 @@ 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. + * But a running outgoing migration uses it. + */ + return migration_is_running(); +} + bool cpr_state_save(MigrationChannel *channel, Error **errp) { int ret; -- 2.47.1