From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023088.outbound.protection.outlook.com [52.101.72.88]) by lore.virtuozzo.com (Postfix) with ESMTPS id 1376A81234 for ; Tue, 3 Nov 2026 13:57:53 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lW+NG5RpqVTuZRdwCKw5oWhM/NwC80mqEllgG8JOB/NMd2W5g46rFqKfDnFftEzcqbiNyVYQZYXJPSAEzHkIHztnsBHyM4Yf/3jpTciZmMAm0E+jknFT/G5HMo0u1ojnVAp+KvtrvcT15aqDRBD2hZsNlrj97YBmuo2PGe1sVn0Qpnl66jj501xJz0LOBjzJwViSWW2YmW8/taENbPrNE6J3L86jUtYT2XiZumdR0pbIYdm5Zg8SSESwH1VU3OC9hOt8nUyAZEjuKkmRQkUaAJtFWNyC7octtx5K50DfTFr3UYUtsF834MAWFmRDyUrU2YdwcLqtI1jlJfEZ8eX9Gg== 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=HFoFuQUBId1lFLIeOMbnK6cW8KNbHYok6KsDy8lW6OUaN9n73BFIrbQmQklNo/8lD8dgSdAxLdVi4JGiaVpo6LqbCa6yeobboqGcEVSQdsfpRMfOl297mwyJYUwZsKgOegbETnYUhrl08zHoPtNLqFxQMyqarBcWr0p/zCZs0CKy1QKzwdeh3+dgHWRGnAVJ9OIyPq1d4/68NPO3rBCLSUTzuIXBXqFxDyvtEbKp21+fIj+JXNkAyTVaOUouxYIzmF3I8oepSSglZvZbjtqXJbTM/7yqYeqYsTs2+Dtn4S7s5wLwNgJXpwNUdYHKAmrm6KUIZDRKKbs+743gxjcjuQ== 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=WLJtQs42Iue85Zi3B13IEN987f6KoHs4WcK2MbeJS3w4bHuh7gh8OlqnG9ssHC4qvJEH3L82l6AbCdKJh8Km2SwDSVgDfpez9mpFO3BD4nMYGJRVsvJVCnTtzPDgnbbpOEHukaw0vSweHAR0xxPaCWF9N5M185p4idK9IJg4hYrdjmhoZrZE1c4nSUJLGiRIzQFPot9hwbKJc8/aebtncpD2HEdqh9s84Laacp16DpGgUfLphS55OYchtq0+whTQLdh0geVLVVfoDrmUsWluc0v+w9HTNtyI/bMlyvYmGCNYMR5fYDuPF9/elZm7BItHAMtJIzISckTVecaC1ckjMQ== 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 DB9PR08MB7423.eurprd08.prod.outlook.com (2603:10a6:10:370::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.12; Tue, 3 Nov 2026 13:57:51 +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; Tue, 3 Nov 2026 13:57:51 +0000 From: Andrey Drobyshev Date: Tue, 03 Nov 2026 15:57:40 +0200 Subject: [PATCH QEMU HCI-8.1 v7 25/35] migration/cpr: add cpr_is_in_progress() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261103-vfio_v1-v7-25-4467fdccbbe6@virtuozzo.com> References: <20261103-vfio_v1-v7-0-4467fdccbbe6@virtuozzo.com> In-Reply-To: <20261103-vfio_v1-v7-0-4467fdccbbe6@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI4PEPF00000153.AUTP296.PROD.OUTLOOK.COM (2603:10a6:808:1::86f) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB7423:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f3014e7-3bd5-4f58-8385-08df39b26946 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|366016|1800799024|376014|52116014|23010399003|18002099003|22082099003|38350700014|56012099006|5023799004|261102123227099003|261022075727099003|261021121427099003|261026121527099003|10067099003|5113699003|3023799007; X-Microsoft-Antispam-Message-Info: 6pi5fY1OaKxATC7HQzxmmh3D7WjEVrMDIM/PE4i24wFCPjiqVK56m7HvM77THLWjkFi/htyS6d0NyJQjrcyRldf1Xj+NufIHgo1ekpompwzxOmwm91/O50389K+S0rAmkvTzb+dltrKxyVqb+orRqOzkyN5dfoJSUjVRjADDQAfDU7hSvKFDSVSSq7k0nRhvsselHsxqXruYgrPMAwQa55m/YRRk9yzWG2mvZuAkJ7yaSsUjZXA3THZjVtcPk14HdfL5Rr+JAc7jgeUzNbr4fDHG0gdD+PbDe0vkdWeBZf5WnoHdGIMrshGk9KfpgTGZwCtb8je3L5k0ZCppPmS1kyNazkAET/Ve36ecEKaj0/15ne6U8NB/V5qOOzd8yVAtDn7fiQ9DMfXGkzZPuDLKRi47N/3Wqk4R7/b0ruOIPyneh6ivQocizNXcrVEmzho9dLz9yzF7quzqcFOQ6dXV3jXBlKaxoAjiCA9virrlFRnNo4EVEori49yJlpVY/PDCLmPc7OwQJCd5jq3yjxJFZoJfDRaobYmCB/Dpk91CZjK9np7YAN33cTR/dvQLJsoBKmc+6J1iBFUMuMkhYVbHTHc/bukcGQsJODUrGV/PcFz5gvCJIIIA2BPxeZ9xzzpqJQH6bKYTyro0RP5KNNtmu54d/ZrmXNgVXny06tIKKK/evR6e/1djbN83LsLJTQCG4H/ElWM+j77XKYOQdqNHrkPbM+SsfWm5rDLCM0S8gvc= 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)(1800799024)(376014)(52116014)(23010399003)(18002099003)(22082099003)(38350700014)(56012099006)(5023799004)(261102123227099003)(261022075727099003)(261021121427099003)(261026121527099003)(10067099003)(5113699003)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eFFrODllbGM0R0htL0FCTThzZHFqQ25Icm0zSlh0WWI4a29tdnFrS1gvemZK?= =?utf-8?B?c0N4MFRTNHJiZXBlc2FxR0Rid2Q2ald5WnE3RTRJQmh0NzRKYVVhUXJ0SFhN?= =?utf-8?B?ZnVyeUxoVVptOUVMa3B3ZEF6MVFsV3FLVnI3azFqZXlKOWpHWDFFYmFPTUhF?= =?utf-8?B?bmxIV0p0enkwbUVkQlJaQlJRdXdrR2I0bEEveFFvWEplcWh3bEdiM3UySTY0?= =?utf-8?B?ZFFTVHBXa09UaHlUNHhwY2Y2WTJjVldaWlNORklrbERoZnREeFViTmNEdE16?= =?utf-8?B?U0pBak43RXBMV2lueW5XSnpWa01OaUtuRThZdFYva0s3MWVMWmh5VlF1dWlh?= =?utf-8?B?M1dDYWpCcHVVN3grNDBhRGpBMXFCMmdqc3hmNm11RWtXcjhSS00wSTJOWWpj?= =?utf-8?B?S1lvWGpDTndsa1dHYThBcjh5MFdJcitrZGVHY295cHQ2R3JyL2dmMy81WXJO?= =?utf-8?B?WHd5RVZuNFl0WjY5ejlZVTV0Ym13YS9mc3hrczBoRURUaG9hSXJGcURUUVJU?= =?utf-8?B?czF3eWdYRU1NUEwxMktleDNpRkM5Z1FrdjdsVkQ2cTZjVy92WUJBeG1VcXp1?= =?utf-8?B?c3FUS1dkb0V1clJaVitMZnNtemxDdVpnbmZscFNML2RlbDdQTGUzYWdhbFdV?= =?utf-8?B?ZUpsZE5pek9WcjR5aUlrelVSQy9WWWNUZURlaS9haWtKQ3g0eVliYytOUW0z?= =?utf-8?B?RkQydGh1UWxWWHpSME9tSUJqQXhDY1Z6RHJSbDJXNTJsOEVwOGNNUnh5OVB3?= =?utf-8?B?Wk9XWmMwdnRDcFk0N3pMUmdGQnpOMHpuNmRqTHJEbWhGdTZlY09BZTNycUI5?= =?utf-8?B?RmIrVElVdm5tL3lIdDRwZmJoSXliOEh2Nmk3dlNoMHkzR2ladUNuUGRDdTNH?= =?utf-8?B?Vzc4QnA2YU5FVW1oWDQrVzMra3h6UkJmRm5kUWNORDUvSlQ0cUdLdm1nYVdp?= =?utf-8?B?d3VUQXFBdEJxczR1aVRUNkNKRWFKbGhFWmpFU1d6aHdRVnVBQmtmanFiWGlN?= =?utf-8?B?c2JBVU9PdDQveEs3ZXBiWHlyVzB0M3dTemVRZW1NQ3B0QzJoRngySmVtZ1VO?= =?utf-8?B?NVJxYUtpWG5mZnpSUWJXU0lVZUV0NlcwUmx3ZnQ1WHpkcjFrWXhjN2F4VnNl?= =?utf-8?B?ZmcrMzFMSS9oWG9ROGxDaVpLemI5QXdKdnlWTFIwTXc5TXh0WTVIQnFtbW41?= =?utf-8?B?MXdSRkl2d2ZQTFlpdDltVW5mSWI4TlFXSTFLVlZvTjNLQ1E3WGtpVUcrME1O?= =?utf-8?B?SWJ6d0hqYzV4NzhTQnhwWTR5REJ3RUJKeHJHcmJKVjA5dTNvaUkrSWo4bHJG?= =?utf-8?B?RzIyNm1zVTBjOWd6cTlENTJLTG9mL1kxRmgzZldvVXBpeHBkSUVMZG1KeEZj?= =?utf-8?B?K0RqSHh4ZUFEbEY3UzNMaVFteWdqejVuWng4MWN1TTAzalY5S3lweGhDRHY4?= =?utf-8?B?SUM3QVFSMjJHR0x5T1FDK21UMDlJZ2E1WjN4NU1qVk1LK0FQNXUvcjgrTGl0?= =?utf-8?B?V1d0REMyVmhJWG5ETXl3Y0RKVmd3aVFiRExkNjd0TktnSHF4WWtsd3M3Ulpt?= =?utf-8?B?T2o3NVBKZE11SHJ1Sis2Qmp1eFcxL0RHb0kxbGZTVFBPckZ6SmpRVVUrSGlS?= =?utf-8?B?aG9RMjQyK2xnNFhkMUtBMnBWWXprTUZ3VW9DSSs3Qm9CTktxaEt1WktjSkJv?= =?utf-8?B?ZmdxUWhZRnRUTlo4ZG0rYzAyVlRZeFFZYjVpSnk4QUNHNzBvQ3I2aHBUT3Fr?= =?utf-8?B?ZnFMclY1MGtmeXAxZHdPR3BVTW1icUdPVWFHdUlrZ1UvZ05WQUVtaUljdE1v?= =?utf-8?B?cUYvc29XMGw3aVYreXRSblFnRHFZZE5wQlNEZVBXbDFvM085Zlc3RnRQaWMx?= =?utf-8?B?M1p1L0dQUHZjbEhPM2J4ZytURnZJVWVIQ1FNRVJTOWNyZ1FIUWRGcUREYlZs?= =?utf-8?B?azZLSXFJUVV2dXBLR1ZnSmp0dGNmUUl5cVBXSnNmOVFVL2Nvb0JqS25kazZJ?= =?utf-8?B?U3NuZFlSOHRxeEpiNTI1NXNkOHRyMk9Qb0I2WHByRGc4cWNUaktvZnhMdXds?= =?utf-8?B?emZLb3RWOUlITXd1a2pxSWUzSEcyRS9TTXlSNk9KQmxnTFhqT3BRcU54NU15?= =?utf-8?B?b2dOSjFkSWN2QTVCcW5sbEttWGRZU1I2eUtVNEdrdktnVFBZVWJ3b21INm94?= =?utf-8?B?UnJQdktSQkd6MG1zcXFWeUVhd1QvU1VFdDN1NXVYL0VBUnQ1cmhvcHJpOEJP?= =?utf-8?B?aEdXQnkyczBjZ1JFK1crU1BmS29ZbTZLa2hFcUxCdmMrcVc0OWxZQWMwYXlw?= =?utf-8?B?eWYwOFh3Skk1Z292eGh5YmhuazVFMlFOSi9kUDNydEdUQmRxVWNsTnpkcWtX?= =?utf-8?Q?wJZMlMVavonRYb2g=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f3014e7-3bd5-4f58-8385-08df39b26946 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Nov 2026 13:57:34.4198 (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: BcwMT7ISDI5W9A4Jr72Uzuvgk35/z14SGiWQYYibFoI1Cg8k3zczD/xr5d03odZxWZmFFHbSFLILD3ZZUpJlO2nSkoSoUwFRuA991G7udiI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB7423 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