From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021107.outbound.protection.outlook.com [40.107.130.107]) by lore.virtuozzo.com (Postfix) with ESMTPS id 4CC1180B17 for ; Fri, 16 Oct 2026 15:26:20 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=i4R7BIUfjE4G9/0B6fi264Ljbgp4FkGkbcd1bY670r6PZH9hohxkdKBK9Qwu35y2yEE1aCu2TxNxYdtHwodrrN4E6fJ1ODI3taM/nMBz3XoVcm5tF2wNlfJ/INYAQu1+UajhIsnbGSJkbT5XcZOgmcijYR7k84F418gkCjs2Mx3bcVYybX/QvbGRq+9rG1ZVt+xIukyhdL1ehJVJ2LD+m9FjJBWFbOYkfv0jmENfgHziHcycyeNneXMJP6Eo1wanFHc7vUfi+hiZbZQh+mAUw0/sBfwYL2OMwwD3udD8l0DEM5wZNuOqs1Db9yzzkc52oQW46Ba4SDScHo33foPq0A== 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=jgUDTX1W+E2jHmxtv8u0uj+PDJXy5VgxEVtitZBqaZY=; b=R6rF6nU/alFQebGAc+mUowwWy2d0ghKTnLTS2VLxFpt0Hg7Oh0wGori1rfyf0DCFWnpen+jj5stGB+uYjMxWH210HOAEHsIvT2NV6LTwmfbXGL88dx4LDcLu4OyqQ0YLgbJwOGuZdFl/QGN3viLKJYgScfwXxtcK7cvpfzdhFArbokCYI/ocTBLBSCeMg/edFDPmRs/cyDoKh6hGu6wDu1fMXlzOVv990GdLPVBl6IniIaC8tdr6W60NeATYGv5zD659khS8XZv08B8dH4FoiLbcJSTIfLARBiTJBTdOVZPpeEmX9180Q/PuBrqj0EGZkUYfCMEUKgUph0E9n/ndeg== 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=jgUDTX1W+E2jHmxtv8u0uj+PDJXy5VgxEVtitZBqaZY=; b=xDnVuKERJTcPFPvg7Rhg7JEfnIkCskJlFFIHR/6kxNghHoJqpoKn6vMxqdKXuJ8/cQ8nEM9YvRWq8SRAHB7WLUwIjD3gK9KF+TXgbEQWJfn/Ww+derL68uUpEYQj/6Q5lQ4StmzmEvzHeFXMoaqcV7rRANVhjcDlgG/t8yfairLfZrWezeviBEPvlyfNMEb4TlfTX6Y4TqNoznLHZGcKLO1yyHGAcGecKGznQYXRjcYtReWv331OjTYJys8Cu9HoqapNDeP3RgZYafo4scub/UfBybLvIQg3lxMNj6uSuL54SJHmVnTnn16GN00XigXxxsWjE+CertfwG+0s6/E31Q== 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 VI0PR08MB10941.eurprd08.prod.outlook.com (2603:10a6:800:250::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.7; Fri, 16 Oct 2026 15:26:18 +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.006; Fri, 16 Oct 2026 15:26:18 +0000 From: Andrey Drobyshev Date: Fri, 16 Oct 2026 18:26:18 +0300 Subject: [PATCH QEMU HCI-8.1 v3 20/28] migration/cpr: add cpr_is_in_progress() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261016-vfio_v1-v3-20-47487cb5a8e5@virtuozzo.com> References: <20261016-vfio_v1-v3-0-47487cb5a8e5@virtuozzo.com> In-Reply-To: <20261016-vfio_v1-v3-0-47487cb5a8e5@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR10CA0088.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:803:28::17) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|VI0PR08MB10941:EE_ X-MS-Office365-Filtering-Correlation-Id: bc9e79d0-df06-4b2b-c9ff-08df2b99d0bd 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|23010399003|1800799024|52116014|366016|376014|5113699003|10067099003|22082099003|18002099003|3023799007|5023799004|38350700014|56012099006; X-Microsoft-Antispam-Message-Info: 2Gw1ZvBIzw7TI349ePj+BYsHMEjSnssU8E40D365HDV5ph0F0/2qBJ4ay56eN7Nyli4tGbS1vS3PH5zE9eBsWkEN1TKATzJq4jqTRYMY0U5NoKbxKfHuttvS3j6weOAd0Dttl4R8AX2NADGTSUbzD2TPvuAOpPqgOJvn1j7orL8wwPXwiPPVBw0hrp0/e5faVX2qUCo7NFekiqwrjQAcpGeCV1XxlIg2fgzJQW5/QredreQTqnH+8/yp3zHv/aOxXnSyFeEvT4KY562uzbZND7HalETw0RWH106Ygelo28QYW/CTX8cx5Ccb8j5xQf2PEbeHpfWEMkAkFdBTuTnupBtbcnmU5jQ3F6KkNeqhCEkWWg0MRyGA0xnmEC7VhizbkYo2o6vBWzFZUpA55OTJQ1sVfizNdrJBlkr4wkuWunnJFyBNpI/PfC1X3F2jUx+fAF2zVAhxp+LowWhC9Hrhi0fcmRWVrcMNyONDYEyI0/G1VD3mXn5OSiqL0li5Wonf7mxVUiwjwYM0hcH9MmrWbKOYqdrlcKdUIaQ4QA3CK50L4WIW6tEIZtiqb1hMQgh9eCwu7wFwrNNvK1YgvD0V+LAFvkkvlsuJj7FKAtbbgHCbz23N1A3gvtq0qWFiyMEfKageUIgJWjOlpVcMntH1J0InkVRJbps8LEsdbiKsWZFjJIo/JZRHJnux/P3bzPbVxc0VcWz5y9KQ84i6fxn/EdG7L+VDwB2ZpTmTfdOupYA= 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)(1800799024)(52116014)(366016)(376014)(5113699003)(10067099003)(22082099003)(18002099003)(3023799007)(5023799004)(38350700014)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SEhJMmRFMmhZQWQ2VjNNaVVjbmFoZXdnWXc0MCtrb1dmcmFEZWZYbDdDczBz?= =?utf-8?B?K051UkJjNHh2RWxaU25pYWhWcndGNXRic3h4Q2tleVMzUmx1Sit1d2hvL3Rp?= =?utf-8?B?M3BVcGIrWDV6RDdNMitrckJtcEhVUnJnanMzVUR2UUN4QmNGSis4WnVzUkRk?= =?utf-8?B?aUZJQUk1R2FEbFhOV052RXJmVEJ5Mi9jc2VtZDZTNjBDbnFtcy9NZmc3b3ZQ?= =?utf-8?B?TWE4NEMwMDI2QTIxUzlxZHZFdE1CeWhSUWlnTEI5Y2tRYjBGbTl1Qkp3LzNq?= =?utf-8?B?ZDFKR00vZnFxOUFDUVpPOFYzM1haSTBwMjdvelZuVndMNE5NRk1qekVlWHBU?= =?utf-8?B?MmZJNU1VUlFsTHR6b1RYNE1QV3RkbWpUUFROR3EzZUlyV3RJUUc3bHBuZThZ?= =?utf-8?B?OE91OVp2cjZNTXpjMEE3bjBwc2xIdWRJUXAwL0NtQ3R2ZUU4bHlzbTNsTGEw?= =?utf-8?B?UEhPemlJbkdUQndkVXFscVFhb0dEMm90V3FNamd1NXN6WjMrSE9jalhINjdp?= =?utf-8?B?YllUVThBbzMyNWRVYm52VGpicVB5Q2toN2RQWFQrUDd6UXZ1VE9jNnZaalQy?= =?utf-8?B?T0F0N1h3b0JQcW1wMUx1elpvVWFrdGpzZldhN2hiT1FuclVGaDU2M1ZHSk5w?= =?utf-8?B?WlJCdnl5T3RNYUZ3WUlteWd6a25vdVQwR0FPTVF0UGtuRXJuWkpzazJkZC9C?= =?utf-8?B?NnRjLzFqYXl2R25zNk1tVUVYd3BjWWltZmtaZWdiUHo5UW83TDFPakZEbkND?= =?utf-8?B?Ry9Seks2NFNPaG9yMlpzVy9EdjFNdXVSR2ZuR1N2VjhqaUQ4U09XR2pmeTkw?= =?utf-8?B?SW9vQUFDVldNSmxoSzdTQ0hDY3JlbkJ5MlJSQmxHTjRGV21OaGZ4WDRkNVNR?= =?utf-8?B?cllhUWE1b3FBN1paeElYcklsZzNrcUIrTmcvU1kzME0yMitrcDlJbUFDVDBN?= =?utf-8?B?UUdkU3ZQanBpaG1ZOW00SGx3UDY4SjJDTGlsd0JyeG9DNTBmT3N1YmwvZTlw?= =?utf-8?B?NjhJaHRWa1FIM3MvVCs3Y0Vma2QwUXc2WEtYaEpma1F4bklzTytVcjlDTHRo?= =?utf-8?B?dGd2NWdYV3c1UmNHamYyMlQvM0VuUG5keHNmOFdxWEpJcGtReTRPY1lOR05o?= =?utf-8?B?YTljQ0FZZ0s1SlUyK0dQeFk1K2VTZ0VZN3lFN01EZHp3cG9CUVhmUDg1dEl6?= =?utf-8?B?dWJqNW9JUE1jVHJOQ2ZqOFVTQlFlRUZMRzMrWFQ5S3M3UE9Ub2VzTXV3TFJI?= =?utf-8?B?RWhaeE9iaFJXaUUwTmFWWEp2Rll3WU80cFJONWczOHdadFZPcTQzSWxwWXpN?= =?utf-8?B?ZUxROVVLYU1oT01ldlMwaTV2YzlCcTNaOFU3cWFmZGlYWXMzaXdIQldlNTZH?= =?utf-8?B?MTJQOXRtR29iQWRpRFd3WDhNSmE5WTZlY0QzaTFjem5QRDBmendLL2VUVGoy?= =?utf-8?B?VWxqNExrbTZtKzFJeElQTG02bUMxUU0yQjlxc2gvczNyeXF4V2E3NEw1cGdK?= =?utf-8?B?d3ZJMVZEU0dSWE1ESzJ4UHI1ZUJIVFMwOU9oUlJhdFdzZFdSR0xySU50cnYw?= =?utf-8?B?TmlxM3FQbEV3SHNEZzRnMW84WS85bjZpZ0szbXVyMXk3Yk1oS2NsMy9aUElR?= =?utf-8?B?WW1oTkJ6TGdvZW1KdHlYdXVDbVYxamFaUUlZb28wYk11eVJVTTJnNFFxdWx5?= =?utf-8?B?RnpLOGlBODV1cVBRTlp1TmJEdS9FU1AyV1FLczg2MjRqRzlCT2daNHlKOC9N?= =?utf-8?B?Mkd3M0NQVWhVbks5UFFlNXBpbVVFZlk3Y2ZrVUZHK2xnSWNUTGVUMk9NWUtO?= =?utf-8?B?RlMyUXU1Y0NpYU5abS9JOUQrVFlxVzFhMEdFUGhsQVRGVyswK0EwZE5nS2Y4?= =?utf-8?B?SjViNFVCT0xDR1pSNXNoQmVYSVcwZmNjMnpjYVRnVjJFdHhCZExPcEJJMHMv?= =?utf-8?B?UEVEaklpTmkySmszYjJQTWZmSC9CKzByWDVOYWVoRmp2dGpuMXRPeHliRDFH?= =?utf-8?B?QmxHVGxrRjVHVFE5WVBXM0RuR2ZRK2xOd052ZGM5cHNDNzVmWVpqU3JvY3U4?= =?utf-8?B?YnZtTmdCWW9OTEpXMjkvM3AvQjlocVZ3QXdnaEZVMmZ2S1oreG8reko5V0F5?= =?utf-8?B?VXlWNk9TT0ZlbTVrcnFOTlAzaW4vRFNqc0xSZnJCZmVUdjF6ZjRBODgrZExI?= =?utf-8?B?elg5RXNVcEZIS2lienlzc3cwd3F0dnBhc2hpUmdDN1liKzdIeEU0VEd3c1FG?= =?utf-8?B?UlpVUUd1Nk5ZOE5vTTFUZGgyOGZLaW9KWUZ5NVFxWTlIVk9hbC9nRjZxTGtN?= =?utf-8?B?L2hSRm5ld0hqRHVmckVMUVJxV1c2ajNPZ0JSVTRIdjBrY2FUM2RaMUJGZnEw?= =?utf-8?Q?Ywyt+MIPmVb5n3mc=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc9e79d0-df06-4b2b-c9ff-08df2b99d0bd X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 15:26:14.3571 (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: MtSikjhHauCiI6/wGW4bRoOYaIWa2bfg/bvZxsxqmpuX/uNRMk/P67pPi8Ijrrcvxc72OGjaaGic0wtYaAianKxBfKvZvR6IzRW+CwauETk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB10941 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..74acdfc4123 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. + * But a running outgoing migration uses it. A snapshot runs as a + * migration too, and it is never a CPR one. + */ + return migration_is_running() && !runstate_check(RUN_STATE_SAVE_VM); +} + bool cpr_state_save(MigrationChannel *channel, Error **errp) { int ret; -- 2.47.1