From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11021107.outbound.protection.outlook.com [52.101.65.107]) by lore.virtuozzo.com (Postfix) with ESMTPS id 07D3281064 for ; Fri, 30 Oct 2026 14:45:54 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=E72JXEQX05cTtkofPzKITVh/o/ZwIZ7dOV4S7uYPxI5ahKQLAq0/7vhc0SLEkq4MToOBYPcDEGuHq4hkfAVBr7QqmNM68rwgTAej9Cq0IPTpw+YNd06+yGIqa/MpsT0X+iF+Sq2orPFraTA8Wm3dv4HfwpeE6Oz0ndVfti266OY5beKY3uElrcy+7ntV9ZdCfnmpvECQUY8RJPBwSZId6prz6TGNlP3wm57g4BuRrA5DmPKOUQVOiSJVUS5Mn/OlOlta9tf7f3vLGea3TXtcMjJDGjq+lJSf6wwDBhV7T1z8KYdusnEw7skAhRLkUPKgHqgDmvcsAVykibDGDZu1UQ== 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=du+mRIc7w44HO7/COiy6W6DkRhMNacdSx8Dj0k1+hIjwTHVmL4pHXZa2uOaXuX2mc/zd5FgBO4ZqiZnPMT0PEn5gJCSkSBm1BA6GoM7m7sIXKKWCH8Q3FilhUK3iqFToRG//BXloG7DEj5ifGTwudSeHGkeRrDfj0H+dVfzRpNkBJZx6izRkCtXVEtsjIBekM+fy8xMI20mh1HB5w6BGHMCcyNm7M+LebfiiqLwAKJf6Q/FWKKSzTniR3/uHrkE8Jkin+fqcjFqbQd7we3uP37u1L9S2asxkrY9S4lbEFG6ys44iRv71XzFvPPNO6J2PUJG3h1NMZSl6/5yzEDiP7A== 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=L1JdM687IxgzT/1iPpNb1NFgzoESKQJFNQfzxVK/8M04VXps+0lOYHX3G6eLDSp5FJlRf5eHXagYCBFLb5P52bqjfh7tG13nTXBnBAPb0TVMQeiwGklyNJDcaSM2/YCyHjdX8VYUS6hNK5Uiqnwz2IHNjnA8Paf5S/Wl7kXuQJEX9XXv+OWfBQjjrfxFgXGpiLg1BPx17hecrky6tbnQj2NNiikpjEwKIJetFaB7EOJzUo9nxHHK4krvqTYFoPq9JFDv4OMnLOiHKb2lboWTVLPMLfBwJTSWZVLZpq/5GW7N/ZbLidFskH6VcEETmjBPsu9he+ylR2gyDPOhOqV3iw== 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 AS1PR08MB7451.eurprd08.prod.outlook.com (2603:10a6:20b:4dd::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.9; Fri, 30 Oct 2026 14:45:52 +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.008; Fri, 30 Oct 2026 14:45:52 +0000 From: Andrey Drobyshev Date: Fri, 30 Oct 2026 16:45:55 +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: <20261030-vfio_v1-v6-24-45de246bc92e@virtuozzo.com> References: <20261030-vfio_v1-v6-0-45de246bc92e@virtuozzo.com> In-Reply-To: <20261030-vfio_v1-v6-0-45de246bc92e@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR0502CA0031.eurprd05.prod.outlook.com (2603:10a6:803:1::44) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS1PR08MB7451:EE_ X-MS-Office365-Filtering-Correlation-Id: c273764b-3ec0-4c40-bb0f-08df36947d99 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|366016|52116014|376014|23010399003|1800799024|5113699003|22082099003|18002099003|3023799007|38350700014|56012099006|5023799004|261022075727099003|10067099003|261021121427099003|261026121527099003; X-Microsoft-Antispam-Message-Info: g6/RjtTghjB01tSm5DnIDS0gST/XvT0CoEdJ+d8ACVENjtX2rZ1K/SUY5SqInWpuaD9P+OQsa1uZVik720iesHbXndr3qOOkMcqEXXcN7W5q8LKjRbCFO5F1NPAnO/iaVplzsWpWqaadLmVXeLEBhRE+O0pSriCt6c+7ITcp28u8Y7lUf0cW/MUVkBgPKWWJ/GDusqDEXsZXz9f/8J1BvztVC4B6jVi8VWzNtQff665T5c8Ovkc//eRu0pcb7JexQB7HMUTt83CAFLW1xRv8ndK3PDaAVTXuUAKRJHT6eOJ/K+8uO3pfjoadnDmmJhtGxAefiUHUDam7cgLT6yaPHkPl1Y6THT58fFtIr6BfYYg3Mxva/6/EKRp+rf4MyuHwlF/W/fJeOrEIB7MYij3FnrfwPdtRrdJc+w+xUPednjPanUGJuAywCU2WKcsDhMmdICTyHI+MMafcVqTGDyOM3TFAHimPk607e2Jlpm+r7sM4RtwMpAVgH8VrsZ16ZGldtvdqKmYj8pft9z2c7lgSB8Gi336tnrnVYlFDAnt1wXAPls17HCEnCwpfcI/wamYhRCPaAAQuGfMHrv3GcVv7mm5k65wU2hW6U3qBl+DCWYqh5bsJtFnhIs/Wo+ZFr2YZCY4a/3DPIjq7W/XXwRXlr25t/reZVT+zmxYov4ouNPzJvNx/lmzFQ/5zcXBjVs03ACPlZa3EPe6gjnZMgCLAR8g4HuqjP8xKS3FcFQ6yDe4= 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)(52116014)(376014)(23010399003)(1800799024)(5113699003)(22082099003)(18002099003)(3023799007)(38350700014)(56012099006)(5023799004)(261022075727099003)(10067099003)(261021121427099003)(261026121527099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WkwxNy9LeDFXRDNjTE83UG5vYm5aY0dZb3ZmWk1pWktkMGp1SzJJbjZSUHdK?= =?utf-8?B?cGxtdHBWKzhUTmFlTDIzcEhiTCt6emZmUFpraDRSaExtRjB5Rkk1RGNyQ0k0?= =?utf-8?B?Vnc1Yk1CMk96SUFDNFhoTjA4WmpRTVhBbDlYOEN6a1oxY042S3I4ZnZ6RWFG?= =?utf-8?B?Mmt5TS85WnBYREtSZVduaVFCOEl5VXcwSUFqZWhHN080SmdNSEdaZER4K2Uz?= =?utf-8?B?K1k4ckxCMSthWXZtVG1TVmFyV0NTNytQQmpZalNSN1RaMWo0S21WY05Ib01R?= =?utf-8?B?NGZGYlpQdzNSdmVUNXdNMGxhQVJMKzkxRGdETWhMYmFRUE5wTmRyNDRuYlRY?= =?utf-8?B?ZTRhU1J5Z0N5aU50WFU3MnJGNTJ4WDZENXdBZFp5Rk41akFsUlQ0Y0xXUmtY?= =?utf-8?B?L3k1THl2d1FZYlpCZWMydGcrdVRIMUYxTlVkMUJBbWlMV2VQR0htSk9jTDg3?= =?utf-8?B?Qk9VVEl5R2VnS1RKUFZwWVRXM1BrRzlxUnJhTDRrcjVFVk1rNzV0Q1JUdXF5?= =?utf-8?B?Q2lYT2gyRFdxNklhVC8vOUFFNGpNRFo3RTdZQjJXRDdNM3JPUUg5WHJydEFN?= =?utf-8?B?Rk9qeEtJcEZjaFdFUjkzSXdudnpvL0xDN1h5SnVpZ2ZnWkN5NEVsZ0Vud25y?= =?utf-8?B?V3pEaE5vaTlCbENESW4wK0JRSHRwTnIxVXloSXZtUFAvSTFBR0RQb2dzRk5O?= =?utf-8?B?am9SYjNvaml2ODJNdnZRYitmSUpjYVFsd2xEMEtRcmhkRjREYzNRdHYxZ2JF?= =?utf-8?B?TlpLVlV4bXAwUmpwaWpKQ2NFQUk2RmVndkRXL2orTlRxcDBCOWZ5YmlOWE11?= =?utf-8?B?dStuVmlMd1ArK21WSThyQWxVZGNJZ0swLzJCd2pUS2pEbk1UT0ppbHU4TjBy?= =?utf-8?B?aHdSaXFpc2xnR3E1WERyak8xZ1dzSnU4Y0I2UkVVS3dMVE1EME9lREw2ejZW?= =?utf-8?B?MDF3S3NMSW9zWndXQnNKc1dxb3NtWjBBK21DeTZFNTVUelRpKzh2Z1o4aVg1?= =?utf-8?B?MDZqdk8xM2RXT3ZuWmJTQVczYWxTVCtMQUJKRDJMbGhtbWY2OXdiZTExSDFN?= =?utf-8?B?dFlCVWFGclppUkdNSFR4OVVQUWRVVUx6aDZiM0ZxVCtlbnl2ZnpXYWtjM3V3?= =?utf-8?B?SGswUXNUL1NGZ3h0UGdEN2Njc0lhUmVnd2YxVTdpN2wwUlpjRXphRkFCbS9H?= =?utf-8?B?ZTZnR1pETUNFOUlTeENqRStYNG93MEhDZkFpNnI0ZnkvQ2Y5SXNLcXppK2U1?= =?utf-8?B?VUd4YmdVbHNsVGNybTR0ZTJ6OWl6SGt3SWZvZElxSUF2RSs0emxFUmZIWFhN?= =?utf-8?B?WUJ3bjRaZytCNlUxNjNqM3VGK3p2anpiZFlBcXZWYmYzMHhLejhRUnlFSDZv?= =?utf-8?B?aVJtTFpCaStlM1dFRUN3ZGZMMWp1SFB4NDVmYW9DUlc2aDBkY2J6cCsveHZF?= =?utf-8?B?VnVrUmNRbm9NUXBnM3JLYlNlazI2YXhOWDUrY05rTUhFNWtiSW1hTS8vSU5j?= =?utf-8?B?Q0VvcWc0Vk00bWRDbWN3a0ZudWtHcHpaMHltaFoxREhOOGdUOUtWS2wrWHhO?= =?utf-8?B?UDBZMG9jZFBqVm0wOEd2UVNmUWhsZEhVOFlDQXBHMitLd2ZUSDhYb0Zxek91?= =?utf-8?B?a3pYWmk3YzhLMUFEUkVRdUZVdGoyK3lRYzNtU280emp3cDU2eGI3V1Z4d0I5?= =?utf-8?B?b3hCdUlXQXdQU2tnU2hUb05lb2lGYzI0bGQzWTFEamlIZzJUT1NETTB6d3F5?= =?utf-8?B?MFNSQUlOMEhjbGRpMUZwTTZ5QVAycUx3YTlUM1BhZnA1TVVwNEo0eld3blZV?= =?utf-8?B?VERCQlc4eXV5Umhma1Zxejk5aVlsOGI2aVd5V1dscEl4ZW5QNUt5ZndyOSsr?= =?utf-8?B?V3l2cDRUSDhYdlhmTGJkQ3dKcGk3OTRqeWRPQXdhbGJpY3RyU1JCb0RaVEsr?= =?utf-8?B?OUR3STgzQy8xaVlEY1gyMUlFVnVRQmRuUjNRK0ZTNWVpbytGeHZOVVo1Qmpp?= =?utf-8?B?NkM1aW5tODRxbGNvREViR1ZTVmVFWlAxY0R4ZS9vTXhhaVNnNnM5NzRhWG5W?= =?utf-8?B?TG1iUTdpY1ZEMFJoZGkxL0djZlBQemhpcms1SE9LVUhBeThxempSVzR2dzJ4?= =?utf-8?B?a1ZxdlpKc2tOdmJNUFpoRUlpTnFtZG9xbE04akFhcmhWbXlsQkNSRXdJWmtm?= =?utf-8?B?RWs5SnBKdEhpMVZENTc3R01teVRQdUJVM3lBZEN4WWVBUXZ1N0hOOVAwZEJT?= =?utf-8?B?a1BFeHpVRnMxTkdSd0tqVStKY3BZckNobnFJY2hyUEdEdnluQ29TdkNVNEJi?= =?utf-8?B?d3dLdkY0bjhzRkFuWnpwdDdRMnFZSmRWenRXcm1mKzY0K0w3MklLTmN1bzVT?= =?utf-8?Q?l7NkMopw3fTE3xkw=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c273764b-3ec0-4c40-bb0f-08df36947d99 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2026 14:45:50.1654 (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: SY3D94Gkf3ulPKAa+y2g7GmAbbvuZOxMS0+8f9P5DuijPIRbwzLwDMo85rlwN6iwXEkOr4TGRn35yLEafT/Rj+ucWI37ivizwV4BFdGyIfE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR08MB7451 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