From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022094.outbound.protection.outlook.com [52.101.66.94]) by lore.virtuozzo.com (Postfix) with ESMTPS id 417FA80BB0 for ; Tue, 20 Oct 2026 16:31:02 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cQQdlOij2KeMUasCP7dL1KXf++MORMuDAUx1VQte+D4Sd9U0SY38W0IwiytBboyE3vDCL816CgtXT38w+GL9hojlsSDomUGyZyTNE8wRBEotDJzyLt4vf2vq8n2iF+GVbri0Xm0qj08YiQs1UMxUh7QIpix9yn8Q8cs6lDvIYccfLKmG0faCxxxJ5NjEeDWRCqe7UQRjehEjvcFm2tJL9/VXjvTSQlpgzudbvDdkjy8qACzK+KgWAo7gLjzE1fjgumiVtqGvYl6fJRthWwRNIQdsM4to5Vq5ptb6G/FNPlr/incWDDkrrP1E99UaUVY9JyCsPEextsw1ggAKqgGklA== 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=vud/qsg06clAdQUlt+CpAABqzRK/o+cUB5Bo1NQsD4AM5iIGnlZK4YYDTQP7kzdqoJPTkBbsHsbwVXInXbak/MosO/Er78XvgVrXewUDRDTCqOPCE9H+3hqipjCIlsyTHE82j7PhRGkk7lhSFzFMHAp0fGC/H8qpQeIb4sdLJaSXpgJUESthsWe715fSnmiYEBvIiguuseyFGL2sFEwqCfEOQCXThCh85mt+15leALivp7KaT1I7f6+TtJxnLV1wUKIl/joIK4XUvGmg16xDvrFsxVb1GnImPojNvayiid/BcF1oYOF2KjbPv+fAu6e0pqDTaYeRlnGsFRmPBAYTkQ== 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=Sjs8U3y7FqxEzMXEpNFxBJ1J5MhoerDkIvGXLis+G2odUN4pJy4CBOrRJGgFBZ9ube1Zlc84jzp33zE3qgZBwW4hB7J3zLIk4hYc1tTRbiV6PTUqzu3nB46/kW+GEchLs0bkeEF3O6mWR2NawdJHSYKzxBPFUqGV/i6AmefzusEFWudJbEpzV5rTh4VBbx61TYbyONCFL+0nW5q7BCfA1fHsuCLJv7k0XRo6Rf4mc2XpseLcJQCu8YV1A77YBPT3bvwN7QUVv7SyTOZuo3BkddEO5D/q0sOS9hYykZKUTd2jaI194pn1c8NEntLBXEALsvlblmZGm/NuZN+vWKJ9cg== 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 AS4PR08MB7553.eurprd08.prod.outlook.com (2603:10a6:20b:4fb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.15; Tue, 20 Oct 2026 16:31:01 +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.012; Tue, 20 Oct 2026 16:31:01 +0000 From: Andrey Drobyshev Date: Tue, 20 Oct 2026 19:31:02 +0300 Subject: [PATCH QEMU HCI-8.1 v4 22/31] migration/cpr: add cpr_is_in_progress() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261020-vfio_v1-v4-22-83a5668230e5@virtuozzo.com> References: <20261020-vfio_v1-v4-0-83a5668230e5@virtuozzo.com> In-Reply-To: <20261020-vfio_v1-v4-0-83a5668230e5@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VIUP296CA0056.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:34b::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS4PR08MB7553:EE_ X-MS-Office365-Filtering-Correlation-Id: 895378e8-a403-4b77-0d38-08df2ec7856e 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|1800799024|376014|52116014|366016|5113699003|10067099003|22082099003|18002099003|3023799007|5023799004|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: xp07P9f+4EfCabdKYvhav6me1bVu44jGc6zIkhaIoPbTW98O0MEGg3h56y8U40JBm+oaTYzysySECCP+1Rjfur22mLHP9nB1SCTOtCifTtQNG0e7kLG3l734xqRnB8oOottCgwihTsk5FdFpRNjUnuLzvj/kNClP8r1Bsuzzj9DQzYIfXBe0KwsTcdc9QmaX59/EAGQ0tWtG8jfNAkI3H4HAp3yuYetJNXISjjHdj5dCTPwjy7Fc3eWf2sGqBdDmUDcovP/oepCXmd39+aKNG1dpZdzkvznBAYNfIgeyBzzXqMNC9NKeXKud5wuEKSQgOTMxCMMtUFMzGLXGSuH71CnSVuZYMa/bXi1ACqUDy92nDAvaPM7M1RdWqW9fpIoDTyT/J6pT9LmlZ38JwTfiDXhGIov4g125YCCx19EbPT2mQn+vkDPO5J2hP6Eif/vE4ZlZKxzIz5mes8Z2w3iv6EAKyNHGQbv0U8Hm5Arl2XZdSJ2BSchVnd55dIs84O1gQSn6ITmZCQV6xXAQrFkyz+n9c9ne9MTG0TCGaGNM1DGXSCRWRY03C4Mxf5FVLSBsf6tCyawX2Ud65iFD0ARMZ/84nxlXncXA3EyERzflHMhT4sYGIKt+c/tGQvH7WRa6eNxRFd5ActRm4SsJA+/wSl5gpcBSX7MDyZZAuhcfVW4kSpFhoAnK7t3fJ5nngY1ovw7klb1cxU6LUxFrcMCNRUhV2+NJe4JwU7g16K9CMKQ= 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)(376014)(52116014)(366016)(5113699003)(10067099003)(22082099003)(18002099003)(3023799007)(5023799004)(56012099006)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VnVmditjbCtnRU85bFAxSFJZeFJHc3BCRXVDWnBUdzlPdTVsMis3L24wQVFa?= =?utf-8?B?R2lFUCs5RUxRTll3T05QQjRsanhpK2dFdjFwOEQ5T1d3UlhYMWlDdURFZHlz?= =?utf-8?B?OHc1NTFEZTdhOEJObyt6ZDNIUVhyclhoWGZTREhKM0hFK0lCUDVPcjRUQnB4?= =?utf-8?B?SjMvVzZ3bllmUTYyc1Y4ZHMrOVpRRS9IUkFoeDZjRnVRY1p3UmZBMjlDaWVm?= =?utf-8?B?cThHTXVOaTRmMUQ4WE5PZUhBa0VUUDhoc1k5eTlpdG9TaW1DdDgvck1qZUpZ?= =?utf-8?B?UHU2eDVjYzBzTjBnQlJPN0pWNnBuTCt3WXF2SXFzT3c5WnJFNDBBRnQ2K21Y?= =?utf-8?B?WTd1OG1vODMwNWYxTU14bFlOTEJvOWtBenJLK1F3bkpKWnR5VHFFanVuV2Q4?= =?utf-8?B?YWNtRFNXaW8wOUd3TnJDTlhFS3pMRlJGcUQ4T1FGamNQRk5MbStabmpIK2ZW?= =?utf-8?B?MjBhcHcyR05oN1RkOEQvSTFrWHJIQzR0akg2QnNrcXhoSHNhNzJhWUNxS1pI?= =?utf-8?B?a3NkOHN1RXBSTW0rUlIzTFVScXVidldEVEFYZkJudG1iMDBDMGM3eWxkMnh2?= =?utf-8?B?Tjl0SXRuKzhwNk1ncmFaMFdLOUlXc3ZDc0dYTnRFb0IzVUM1MENCa3B1VWZK?= =?utf-8?B?d0V0Q2JsMnd5T1FlOC9nZFFjR2tsL3RhaUpNNHVPdGpDaTFNYStoQlVsaHRK?= =?utf-8?B?QmZ5OEEyTkFLRU1yejVlc0x0c3VVUnBvdTZzbXpBaytQL2lLck5McGg4cklh?= =?utf-8?B?VjF4YWhVQXVLb2JGTU5iZ2RFR3VPczJWSWZObzNDRFh6N0FkZVB5elUrYzRJ?= =?utf-8?B?bytac3J4Y1F0Z1dyeDk5Y2xqZUFwcDhkalJWMHdqUzJMcTdJMk1Nb1Y5TVk0?= =?utf-8?B?V2owVjAzNFExUTc3aVJlTkFNMXV2enlRVm5xZ1pVdnNaTDRqUGlCenFGbXBs?= =?utf-8?B?OWRtWHQ0L2Vwa3AraHlYdzJSQ0JJYU1TL3Y0elRqT09KcUIxWndhVDQzbm8r?= =?utf-8?B?NXpWeUNyMHpHM1F2dzdqNFd0eGlOb1FJckU0NGthQUhqYk53by9pSHZwbUhv?= =?utf-8?B?OXA4MmhMbUk0dWxxcWZzdkJ2N1RHVkszcXFaRVB1MVFUeFpzWHllTzdkRE1s?= =?utf-8?B?YW1ibDBsQkFoOHNXeFRJdEhaV3cwRHlkOEZkU1N5NEZwOFcwUjF2SkZJZDA3?= =?utf-8?B?MzN1bVJGWDhjSWtlWlF0SXp0U0Q5Y0JoUGt6R0tmNm5qSWFFWGtKRmZ0Q3FJ?= =?utf-8?B?aSt3cHlGVVp5SkF1N2d3V2RkOXc1aEdZYVlKb0pHQlMzb2V4ZVRiTGhrcEpn?= =?utf-8?B?dDNYKzBBY0NxNjVOc2g2TjBzajFXS0xRemFhYWxveE5RTUk3SFFYT0dLV2Z4?= =?utf-8?B?bHRaZnNQdTcyRno1aUEybjdIcGpPeFUyeGJxM2xqRFp3K2hKLzNPdGFHZWh5?= =?utf-8?B?ak5QaEN1MHE4YUlzREQwblZwUzV2QkZ1YUlhM2MvYWJBNWMyYnRDcGt6a2NE?= =?utf-8?B?b2xHN0U0VDBhb0NGWW1ZVllpUUIrc0Q4SWxyNHBpRjJyZ2ZraDVDTUxJWDU1?= =?utf-8?B?RWo5NHVtZEl4SzJOTllIOUQ3T0VoaU15UFZHQ0h1UEVJYmdCNkZRdDlGREFB?= =?utf-8?B?YVB5VDBzTWVIUXhmL3pYKzRtbC9qaE9KV05jbnRHS05OWi9DNDVtMkM2RkRm?= =?utf-8?B?VUdlalY5cE8wRkZuYk9NL0tIMTRnYW8rRnA4RjFBVEdFeW82d3JXcUYvMG1N?= =?utf-8?B?RGxrak5XQzc2YXRNQ3ZjSFV4RTlQdS9HZENxYWNrb2JYZjRZempta2pRZ2gx?= =?utf-8?B?NlR0NVJrcm1rZGQ4OUVWTnBUUm03Lys0ekpFMWdrNzQ5d3ozMEJsVnVCTmd1?= =?utf-8?B?N2k0NjZpd29MeEpidGkyY0k5dHRNV3p6dU9YZndqWS9KWS9IdzFLNTd2WE1w?= =?utf-8?B?N0JpMXBJVXNoY200Ryt4ak9Eb2FnZlptYzl6cithTHZwMGdFVHU4TWJGN2VY?= =?utf-8?B?YUFQT2ZQaHdHL3NKRFZnRC9qM0ZOYXRJYjdqbzZSaElWMnRlUXdNNWQ2Z0lS?= =?utf-8?B?WldOWERWZjhmVGtSekpOTkZQVlFlV0dUT3IyTzBneitxWWhBSmF1TXJOOG45?= =?utf-8?B?U0h0dFYrMm5ZNjVMazZpVzMrR1Bra2xMeDBOVEdqRzNFSmc4cnE4c3ozakNv?= =?utf-8?B?VXA2ZkhhciswZWJRNXBNUkc1VlBmTEZkUERkUmlpVlpvZ1d6cjRTVzNUN3Y5?= =?utf-8?B?K25xUFk3NDQxaWlTSGFlVmI5K3RMVGZYT1J1cGpSbGZudnQvQ24xYWZ6M0JW?= =?utf-8?B?eVhCVC9nOTVlUVZPSnQ2WlczQTlrcXpwNGtSV2dZOE9RRElwbXRGSDE4TktF?= =?utf-8?Q?H3rCx0dz2nwh06wU=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 895378e8-a403-4b77-0d38-08df2ec7856e X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Oct 2026 16:30:58.2551 (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: fgNlCF1HlsI6bEG7ewUs9FAo7NEZ7GxYSngQz41OO1jxuBqzEOCjxxDHty4O7a4vd+hVQjR2tZCfS0T/AN49vqIzSSwTPbrrx26d8T7Cp04= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB7553 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