From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11021112.outbound.protection.outlook.com [52.101.70.112]) by lore.virtuozzo.com (Postfix) with ESMTPS id E1FD5810A5 for ; Mon, 2 Nov 2026 10:36:39 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=blN60NX7L3gSsHdYK8eRNTpvPOvpuRHXbED+uh4MFZVfbYoYDN9Qj+hVgUyX2CMItV48xNRdiHklmXmjLIatjLF1IlcGYWWI4OrOurpiMoK0o77ddKvvxlsKbe9p+iIGx3a3NoZnw4NeCM4kfOCzowBMB59OWn9jO5NRjul9b/KFB5zY4aByIOQCo3xAIOwi4qvxG7vioBjNgH6ab7Uo+PfuUdyYB+7T/88jMWqqkj7DxcNypTlI0l1cxxzyEJQBNkAI2XKuKQ0kKJMiRlaXzr0v9W3IB0ULpYSB5F84VJnyCokAR4KyMMOTyTW7xSVZK8Fyqzmd4gUk9bZSE4gxLQ== 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=f4bRJYGOyNEyMJpBmVnw/xubEvEu5AkM76JEO/nc44Y=; b=RugpLQsbkw2R4h0bVAmbDKfYOl17CctSxAoWa45yiaF1gHA0wBZWdBnDqIJiQkU0yeaD/FG0VvkqDsEuAH2H6uCt+4/1d399pEfqUfmvXOIK0AKU3hvwsMTh3ccPJl2ZaeYq7+k18RxEDbNOrqiJoNDT7FPs7C/57xFgEngJJCg+m2WRxvLX59+IZXSAdluTj96aFKG4OBczkSMSgt4yQJA/mmf/S5NkIJ18VAUWcZawUPlUs9SLgq2vWNvFMCI7I75IviQZuK89VkGRY1pQ7IFAMGh16FOiv62IayLZJ4Ysd66TAOVUzgBs/kQi6FVlzutV8KpDp4oNdCcjRPKW/w== 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=f4bRJYGOyNEyMJpBmVnw/xubEvEu5AkM76JEO/nc44Y=; b=SIDZ+N702wfPsc8BqiY76vr0ZTM2yFAeihK1L5yJv4JU0O5rSHDzVQvQpxfnnCClLkv6i0N6M2PiVeUtm31zdjmq/qCI3Yxt+zWQG7jqjEjGw+O5EIJgTdq52/w/NYSZnd1+xuck78DqCmGeC2xRHg7Dwus+tqs5Xfpa7wxZ24mvSY55LsLD5Y865MPCh7xbLL0Or0pCR/ypcOOYsebSqVtfmeZvbH9Tbz6rNkonogOKsLr8ZJLPvQrneiMLCyfsntou7toKJaBxg0KONWirvM9IWJVKtzwVZ+O2PHb/5Wl99AkgEatSA43v19hYJfslJOL35Se4+77ku7YUMBq98g== 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 DB4PR08MB8199.eurprd08.prod.outlook.com (2603:10a6:10:381::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.12; Mon, 2 Nov 2026 10:36:38 +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; Mon, 2 Nov 2026 10:36:38 +0000 From: Andrey Drobyshev Date: Mon, 02 Nov 2026 12:36:41 +0200 Subject: [PATCH QEMU HCI-8.1 v6 26/34] vfio/migration: don't assume the device is running on CPR incoming Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261102-vfio_v1-v6-26-9bc7cabc850d@virtuozzo.com> References: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> In-Reply-To: <20261102-vfio_v1-v6-0-9bc7cabc850d@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VIVP296CA0048.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:353::18) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB4PR08MB8199:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d809216-34cb-4df0-5e86-08df38cd2901 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|1800799024|366016|23010399003|52116014|376014|38350700014|56012099006|261009223027099003|261028144727099003|261021123027099003|261026121527099003|261021121427099003|261026140227099003|261022105027099003|261022075727099003|10067099003|18002099003|22082099003|5113699003; X-Microsoft-Antispam-Message-Info: xZoJlmthzRyU6Oa6oOQytTqz7m0nGEZT41UfG8iyU5ZqCX9b01Pr3K01fBfzB+kHCB36ZycGjbRl7/EotvShL+UklqloMCHX9T1DrCDSMg4ElRY96vnuEz923FhfHw63dt28v7Fxk9DJK2fyjQDoHYr+twMHwlHs8ZjwqQxp56pFuk0eO/c+OLuZ4FafOPsDLXq4VEDSYBa6+Rq2KXZxmcG7bRjKiK0K6GTFlCK/AxjX/ZsT7eIass/a5/hLBZngaFSUVj5kNZe7fiTqmgt/RyPlwOh3+DLlDhKXFhK/06FQLzBo2YNhEnKksWQjq7d29o/gf+4qa0snkjsnuBWn7WzolpZIi8n6hImEusAv7jW8XkX1odfMW0Zn03mGJCRcthXB3tykKY5G5Y6YKenb/22SxYW+6lL7kL8+N6Gt4+Qf5saw815dPaW3nckLAtdNAHlAE3uobL4sYwO+LHMbqFQN8lJ3mLL6Ow6dWWXauWSVI4378EeSORjIsOMGuj7fy1RiNXukDjZWaWAWPGlggdeoPwUQDBrDG/eAaoVKCkh61dpaMQFyUWvlv6noUH4hs8dpNN5NF4rwPcYqLM0XH25T1R1SmM3bGOdjaKByL2+PJ4aoJd/Wf8y259QW41kBEnHHfREGND4bCDAtmxhk+FwoqJo1ZQdIs7c57BKhsa+29EbhmN8HUa4fN5IvkGWBogQYynqj7cgkqs85BuM5GFtGYVxBRXGMc1MsqSYJ9E0= 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)(1800799024)(366016)(23010399003)(52116014)(376014)(38350700014)(56012099006)(261009223027099003)(261028144727099003)(261021123027099003)(261026121527099003)(261021121427099003)(261026140227099003)(261022105027099003)(261022075727099003)(10067099003)(18002099003)(22082099003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aUFCKzR4cEYrQ0xJZWJNWXhsMStMeDJaM2FPVjk0ZXVnWnlndGVtQk1veDJW?= =?utf-8?B?dG9BbUNrYWZtNWEyZ3dHM2xuMG16cHFaOERvN2oyeU1QdDZLM2NiTFBGS1cr?= =?utf-8?B?amVoNmV5aHI4MXIzMy9lM2tHME9PU1FhM0ljQlE0Vlo3dGZKTUYrNDhuRExK?= =?utf-8?B?OHdadjVRNDFNWmVaL3FRTk9SMTFmTENUZVZXRDk2YUNqNlhRandRSDZYa2dF?= =?utf-8?B?MGtoc3pTOStOcXlMbGZKYk5SZy8xT3gwQk5YeE93VXBhZTA3TFFRbm1QTXFW?= =?utf-8?B?ajBIZVZiTlhiR1ZDTEI4MjYrZXl5eE9hOFZHYzREd2p4QlcrQW5tWFRkaGZF?= =?utf-8?B?WjJLNk5jUkFrUWxKcktNUHFKelRXQWhEbkVlbTUrKytRVmVTd1h6TkZXbGNO?= =?utf-8?B?QVdPSTQ2dWVvalRQZWFJUDRUQnR0K0NxVmhVYThFYzdhT1NRZDF6a0NpMnRT?= =?utf-8?B?c2puNWd6VE0wUGFJZ2dPWGNsenRnQXJraE9mdzAwb1lGUEFsZ053OVdHQlNQ?= =?utf-8?B?SVhTdDlCTytGclUvTGhVZEFlR09Ya1J3ZkcrNGo0Q1RWZFZ3TmVSK1BYdFo5?= =?utf-8?B?K2pqd0I1WGZKWjgrU3M0UXcrZnhIMGNHdjJoWUZMQ0huaUFQeGF1c3BqUzI0?= =?utf-8?B?a1JpZGkyTEZWa3BLQXMzUFJ1REZsRzVVRWR1RXdldytZc3A3TFVuWUMzMWc1?= =?utf-8?B?WGRXRmpwRktaeXMxWXhCdUhQWVdvZ1B5ZmZZMnNWWkRtT2xKRjh3eUFaaXhn?= =?utf-8?B?N1VERW43SW01NVYrc2h0QVJYNmM3ZnBOOVRGLzlMRXZGOTVKWHBVcTczVm1s?= =?utf-8?B?YkFEVnV0Y3oxalpCaVkycWJ0SU1KdExsZjRJTXpWeHFsb3ZXZkRyYkdIekF3?= =?utf-8?B?NWlHdk9mQ29SMkh2OWlSaTMzVnZ6dzBCTmN2aDJ2TnhhV0E5VjZBN1lsZzRS?= =?utf-8?B?c0dMRWdYNVVJQ0RTWHNySnl4eWZac1ZSelAyaUY4T3ArQm8rMTgyNHU2S1BN?= =?utf-8?B?d0hWZnR5cC9XS0QwWHBJSnJyNHpLbGpRV2wveSt3QTF1MGhsY3I5d2txVk9R?= =?utf-8?B?VHJVSlBhNWQxeUx5d2QrODF1TklsaEZsYXZzUlNCa04ySEs1OUkzN3lMN3VV?= =?utf-8?B?OVM0NC84eEhrbTZ4RVpzeDRwWDJ0S2xrS1Y1c3J3YjFGK2FkemZDZExaamZm?= =?utf-8?B?YWdLMVFSdndmSFYxU1RqeE5DQUtxQ3VTMnFuNUJjdFdMdlIvV1pPRm85Rzg3?= =?utf-8?B?K29uYkxFekhCSG92ZWo2S1lkbFdsMFN6Wm8zR0h5ZVdZZTMvQmtlVmlEZThY?= =?utf-8?B?ZWJoUWk3UVc3b041cDRadlduT0JvcjVvdXEzc241R0RVTDd0ZEppdDl3OUxZ?= =?utf-8?B?N3BkUUNBTG5OVXBrd0hPR3NNeU9wcGI1R0J2WitWU1Q2TkFzRytSUzYweVVs?= =?utf-8?B?MGxtT1Fkcm1PdXllQmprcFBMaWwxd3VHNVBlQzg5RXFTMlpqTDQzWm9wYXJ6?= =?utf-8?B?YXp0ZXZZZ1pRT0VZMGhZS3NCMVlVNG4xeHBlSkRRVzVJcTRkZGZ6bnZrMkZR?= =?utf-8?B?aUMyakp6UUZnQjNrenUzQzMyVjdKV2YwVzRseUR3UXZvOUJhZmk1VWgvK3NT?= =?utf-8?B?NkZLMXlFaHJNUUtVQXA2bGJzcW9FdlBhbkFUY3ZTTTFxNlNkNU1DWGpJVWxv?= =?utf-8?B?UWtMaWc5bGprT09VUWVNV2VXMEpwZXVPTmNvMm5DK2NlVGxuS0RsSTdFbllw?= =?utf-8?B?UTJGQzcvV2V4RmtLR1VFZ1FPajJqZnhVNkhwdUJUZi8yd0ozQ2NIVThGUGQ1?= =?utf-8?B?SDBwOVZTekdmdUErci9ncTV4N3VMZHY4TjJqMzFLODluUFFOS2hwMEpKUGlE?= =?utf-8?B?SGs3RnptdHNPd1NiK1VZbFFnNlVvOTdtWUVKNUYraUw3QlRFaGFZZTdidVh6?= =?utf-8?B?L2F4blRWL1lPK3JwUjRPQ1BObHFxWUo5NnF5YkZVL1FBRDRQVEJZMmhZbnla?= =?utf-8?B?WDVwMjJTT2tJMEFwc0VDV1RhNEpOVVZpL2Zvc1VEZkd2NDFreTVlQmYzbzBN?= =?utf-8?B?WjYwYTA3cHRKc3UwSmQyZWhDdUpyN3FiQ2tFWHczTTRXRFVKU3dsSXRQVkhr?= =?utf-8?B?V1RHbk12L3BtcmdNMHpOOElzL3lTbmpMMlBra24rdjM4RGlicnBMcWtvREVI?= =?utf-8?B?Kzl5SUNJZFZFZTJidk1RSjlCaW42V1E4SHU2WVI5M0pnKytJdnUrcDNzOU9Q?= =?utf-8?B?Z3YzVmhuWkUrVHluTU9zdVpqSEtEZzlRV3psZDRpYVVmenZJNjNiVCtFQ0Rn?= =?utf-8?B?S1BKYyt5MVlHNU1XSFdvelVGY1hJR3ZSZWd3WmlKWCsvM2M1WnBsSGxBN2d1?= =?utf-8?Q?DJnWkNHx5Zwe0ru0=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9d809216-34cb-4df0-5e86-08df38cd2901 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Nov 2026 10:36:31.9143 (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: HZ0LdQAjc/oxgb13QP7KwyoFeFOdrZZwhj2Z92bGcL9j6iDX2qc/27CBM3EmqjSn11xdJZGra5+9vs4hgxUS7kHBXDHogU24xH9e1s8iwpo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB4PR08MB8199 Since the device descriptor is preserved across CPR, the device keeps whatever state the source left it in, while vfio_migration_init() on the target still caches RUNNING. For a VM paused before CPR, the device is in STOP, so on 'cont' vfio_migration_set_state() finds the cached and the requested state equal and skips the ioctl: the guest runs with a stopped device. On CPR incoming, cache STOP instead, and have the VM state handler, which doesn't touch the device during CPR, note where the VM leaves it: RUNNING once the target starts the VM, STOP if it stays paused. At CPR the device can only be in one of the two. Fixes: c29a65ed685 ("vfio/container: preserve descriptors") Signed-off-by: Andrey Drobyshev --- hw/vfio/migration.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index b142c9f2289..04d0de7cef0 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -914,6 +914,14 @@ static void vfio_vmstate_change(void *opaque, bool running, RunState state) Error *local_err = NULL; int ret; + /* CPR target only: the device kept its state, note where the VM left it */ + if (cpr_is_incoming()) { + vbasedev->migration->device_state = running ? + VFIO_DEVICE_STATE_RUNNING : VFIO_DEVICE_STATE_STOP; + return; + } + + /* CPR source only: the device keeps running across the exec */ if (cpr_is_in_progress()) { return; } @@ -1039,7 +1047,9 @@ static int vfio_migration_init(VFIODevice *vbasedev) vbasedev->migration = g_new0(VFIOMigration, 1); migration = vbasedev->migration; migration->vbasedev = vbasedev; - migration->device_state = VFIO_DEVICE_STATE_RUNNING; + /* A device inherited across CPR is in STOP unless the VM gets started */ + migration->device_state = cpr_is_incoming() ? VFIO_DEVICE_STATE_STOP : + VFIO_DEVICE_STATE_RUNNING; migration->data_fd = -1; migration->mig_flags = mig_flags; -- 2.47.1