From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11023122.outbound.protection.outlook.com [40.107.159.122]) by lore.virtuozzo.com (Postfix) with ESMTPS id 0BBFF80474 for ; Fri, 23 Oct 2026 16:55:19 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FINaWYLGFoXFqEPHAClTifolvMGyCwJP54+9lUyJBwKSGIrAT6ebawq9qrdrhZ8AR71s+8JF0l9DuNe3Buz/vLUSI+Vy2Of3ZpiqEpdlZmm08LrYVF5SKtAB9KcUPSklv9i8xtWAAK2GUpCrffxV1BHIjri9BnPupqqEqIab8tXL7ftbss7UKi07WW7bF/7DPmzWgQD9hm0NXcAOld6SDHKivgextNaoCUu5tH3BpyVLkFSsYJ3lfjHIZIQy1IsMPpdalUrouCJFZWWJuJzk77mjLoE2WzJShrbjrLod+oq3sqnGvpfv8uNxx6JBTxEYvacEjJpPzSjBGgH58+RxBg== 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=SXG5erAnPPKXZSdzWjg+tiaiUiB+sXDuoE7cVfRlxEk=; b=tOLR4G0OmeY2+ivO1qedC7+21CeDH12wvDZVWXIOQfGeZB3qkaxxnztoywNOxZSwYIV+1f+2aUlvVg5sSG1agOFa5WxsTKfQ3FR8XhaQ/4cGLSoowmD289LPyRV/+8tvhuiIgQqx4270NTjijhWXYn86/zR/hW8YVSGrSJcEKgazAGS43sCVKCqMhVqsCQ0BC+S1kTzn57aifRud1iBXUv43JywC6VjDwGR1pR1OXLxdA/c30chQxSEroUULDwksFitaxVaFMeqiXjMbl+5CrZWFPy3dMyDJdjctHX0XfD2GB5+CcnuJzq0sS4LLeuRoyRMBlZTMXkuYIj1TVuOlCA== 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=SXG5erAnPPKXZSdzWjg+tiaiUiB+sXDuoE7cVfRlxEk=; b=A12EIOgp8gpN6cDv2oVMr9gqCkD2JK4DXhBkHEBPyHhECimUfvL7bSFI2KJqdHjvktQQ7bsIzKhwtW9spGbyWvc5IvdZgjHUsnita7FsZJpDaN2RcymEYpr9wOZc/BVkIIpll55uV6hjMj1zFqjMuCPEnY1Sc0kOHFHRw4WiZeO+8XjVs/EUwsX6RU5r2hLLU2LqqcgtUsRXQ0kcJq3k8sjvfFO2+7SQbKd5d4uGwgDd7UuJFiQmsuK/k44eFqkcwpeALs7hG6ixXNLpdj+wT9unlm8PL/qDOWPdWN5D2RRT0NmkK50ZV2DlwoLyXMqsfTlgVJ2VYohQX3wW53ipag== 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 DU4PR08MB11747.eurprd08.prod.outlook.com (2603:10a6:10:646::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.19; Fri, 23 Oct 2026 16:55: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.017; Fri, 23 Oct 2026 16:55:18 +0000 From: Andrey Drobyshev Date: Fri, 23 Oct 2026 19:54:03 +0300 Subject: [PATCH QEMU HCI-8.1 v5 26/36] 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: <20261023-vfio_v1-v5-26-ba0bf3c6d122@virtuozzo.com> References: <20261023-vfio_v1-v5-0-ba0bf3c6d122@virtuozzo.com> In-Reply-To: <20261023-vfio_v1-v5-0-ba0bf3c6d122@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR0902CA0027.eurprd09.prod.outlook.com (2603:10a6:802:1::16) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DU4PR08MB11747:EE_ X-MS-Office365-Filtering-Correlation-Id: 77c54e2f-6473-46a6-bd82-08df312654d8 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|23010399003|376014|52116014|5113699003|22082099003|18002099003|38350700014|10067099003|261009223027099003|261022105027099003|261022075727099003|261021121427099003|261021123027099003|56012099006; X-Microsoft-Antispam-Message-Info: MKuljo9EQIwJX+DoU8sfaNXN7MtqRxLg9IAmiiNv5uP/hukK4tVownMoMsZkHZUrdV8BJ2sHo+6padYUKrJGr3d5sjZ1v55a3JZ9kwtJ9u3FL9WMI781yemupXQZJeQqVJUyBbn4FLSM6WCnjUTWd9Os4f0paUeahNIAAuOCjJh+Pt9oHjyDNitqizbFMBP8wc46hv9P2ipzvhUb+gxRCPSSatvunf6Ws5ddg4bM4Nhrf5DpundycK5Jupi4XzeXiRicgRHOaSnKkR51ffyV7g3xgxa9E3NcKPFcRwFILu3JgzDb7XonwnhO5Prni+F+HREdO12fwKNXoDuhiNcL2D08HEsqKR0i0R8fYv6Hr83Z+Kmeuey/k5RbYlZfrZNQt3MIMf9fWdUktnwA+hMgVref2sJ5sOCW0SQp+mjnyaS74BmJ1u5s1OdI9p71WQV9nz2Y4fiFJOKsR49+hd0C464uHk7hGU2up1pzIgUmf5SwUX47ZufzHfYucfTmACJ9ghfYdcPf53OmDyqDqxK0AkBXMlNSLnLcMMnkEAu3BjRSiYhx3Tx9uRkuEuuAfbIpO9n7yU+xATCJdtNxzLSDf33lFM4pfqsvuUddJb8uLDJDus8gM/vjpf83xgcfwkldBFD5PhngPYk46hijItV/Dv7Vqg/c8s0ARQQ6XD/oJebyToTHwjFEObfnpdgR+HozbZFzLwbUrvpvo4EDXu5VRnOBPQF9LYFqp2wmSVL7NYU= 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)(23010399003)(376014)(52116014)(5113699003)(22082099003)(18002099003)(38350700014)(10067099003)(261009223027099003)(261022105027099003)(261022075727099003)(261021121427099003)(261021123027099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Tld4bjhRNFR2Nm9VR3VINU9ucU0vWC91TEFkcmlZZStGMGo4YXN6SmwyVVE4?= =?utf-8?B?cUttSFI2dFJvUnBjMGxIYkxvTFNVWDN6Tmk0MXRaV2JyTjB0Nk9RVmtXbnhT?= =?utf-8?B?dysvdGNCcHo2ZWpnVStQRjZCYkFkK1kyYUlMTWZzODYvZ1hiNHFkT0lBS09C?= =?utf-8?B?NjVHc1hDWTM2dHAvdEcyNzFZOWJ5aCtaYS9DUUwzcUxMcGlnNlk1NGRRUEVx?= =?utf-8?B?WHdudnQrWjJJM1pEdEFkQzg4eGgrWXpaYXJqcXZ1NDlnZ2xwOGp0aEEzNktF?= =?utf-8?B?enNYb3ZMWlc0UWdRdnJHSzhZYmg5K3hWQmN2N0NENm5sdGYwbEc0TjQ3UGtV?= =?utf-8?B?a1JudEJkNkp3Z0EzcDg1bEswSHJjcmE1Rm5PNW1sOGk4Yk54WDhncDV4enZE?= =?utf-8?B?MjRvS0paMlg5Q1J2TUVmaElaS2NPS0RnVUtMNi9QVGZUOVV6WldYa2FqOTZz?= =?utf-8?B?eFNsanJqbmwwdkRkdUVoVUFTdVlTdEtlbFllYWQvQmVQWEFRenQveTdIb3o1?= =?utf-8?B?VlhuNU5JNTlkaU1OcllpMmttZVFGSDhCRzdVY0xTR0JabGEvL1BrZ29pQUtR?= =?utf-8?B?RlVKZjJvYTFEaDVjUlozc2dkMUF3NExJbTRLM0huZG5aMzB1ZmdiK3hTQkh1?= =?utf-8?B?Nlk5eEREN2NRWnFOanFOc2dFeWJVVU9aS0FTalRSdUdCd0F1U0FBaktQbE5s?= =?utf-8?B?UGNrMWJTd3pSRzUwT0FnZDNmZzNPLzVDdExveXo3TU1ZajZheG5DaEEvdEE2?= =?utf-8?B?YmlFS3B1T0dlWVc0amVIMy9ncmxXSkdwKzJyR3U5ODRDZ1NKY1l2NjhlMStL?= =?utf-8?B?R1c3NHFld3R4NCtWTW1USks5dzRDZzVPOFhOUGkzdWlWQktvNi9jNTdCZVUv?= =?utf-8?B?eWs3bFhqL2JnZ3BBM3B4NGx1SHIvQUpTQWNFWkI0VU1QUzRYM0JuemxBWEpa?= =?utf-8?B?bzVMYVdPd2lETzI0aUYzMlpkNlJQLysrbkI4YW16VWJSSTg1aUxIbXBaUDBr?= =?utf-8?B?ZC81V2hpKzBWMFhES3VhU1NTQkQvUHBBU1ZLNm9rakdLOEI1cHRGd2J3QTFm?= =?utf-8?B?aG0vK1lqRFlwTHdHSWJjQ0J1cEgxNFJmZHE5SnB1MWJXNlJNMGNHcDVFWmMr?= =?utf-8?B?M3h3bXFvWHl4Ym1RdVZ1OWF6c1k4MzV4NXRWR2pWbUFqOFc0V1JwODlWbGQ1?= =?utf-8?B?UE1Gc2lnNkhXa3M5dVhkZ2xiZkRwdS9zZGlway90TkNNdVJaNCtNNjM2Tmw1?= =?utf-8?B?WjNhUnUwbHB3K09RTnVBK3BGQzI5YUFWbEpnWDRMbXdEMUM0ejg4L002V1Jp?= =?utf-8?B?RXo1bHZINjI1OHVqSnVxaVphbHZZQjZNMU9YM255TktZOGFvZG9obXV1VkFH?= =?utf-8?B?clJjdEZnS3FPYkpVaXNjT3ZuT0YrK0xxbkRmcDgrTHA4ZTJDbTNjYytqLzc5?= =?utf-8?B?ZHRLNUx4d0lBSys2OWVhb2Ird3czLzZxYVFzazhsSDhnMEh6T3dRQ0l5cFJ5?= =?utf-8?B?TEEvbmx2d1FVMWRtQWxmTlI5KzlDcXFYZUJoYngvMTFzRXNiVHdjMG93Wm14?= =?utf-8?B?MVJCUUV5T1E4YzJBRmlDd3l5YUJxMUp3dmU5ZEJxQnJvc0VZdjBRdk9IcTdk?= =?utf-8?B?YlIzZ0NOcUErNHNJUGZhVjRVY2xBaG4rUTE1SHJCRzZNcGJLU1VWVEJqNERZ?= =?utf-8?B?Z3NNOWRRSjkrTmczVWtHTVhFNjQxWDdDUXlJcjZHTlNEelpQelRYejE0SElh?= =?utf-8?B?WFJVdjFFTlJOblJPRDFRTERFVElNREtzUXE1OUpiZlVYRXQzY2kvZkkwdEVV?= =?utf-8?B?M2t3NzFvb1lXSFgzZWZGTmtSMnMvS2pJbENUdUJFV3JVS1ZzTlYzcm9nRTdw?= =?utf-8?B?UVdwQmhSQ2VlcngyN0w1dWhlRUIvUitMakRUNGQ0ZFpwVi9CcktkWktYS29H?= =?utf-8?B?QW9ZRDZ0Mi80OVdodHNFRDI4anMvSnliWDZXUVZJUlhCcWVIdFVYZ0NVMU56?= =?utf-8?B?bVc1TjhLVzlKdVVZQXlqeENrS0VVTUNJQngzWWlnNHVVQWNsTkxLdFVGbUZI?= =?utf-8?B?NWNzaHhaTUJ6S1hxK2g1SVdSQy8wWDJaRGNKb0JOTGUybXlYcGNCQmorZ1NO?= =?utf-8?B?WEhZU3lUbFpWNGNZbjVJUHgzUXdwTFMxaTJxNjRua2JwRFVNYVYrZ3E1N0Nz?= =?utf-8?B?SWZ3UzFMaEQyMzhka0EyU1R1cTFJRi9BWVdtNVV3MDFqUm1qb1ZocTVpa0Q1?= =?utf-8?B?MzhVd2YrYUZOOUlkbk1WQm5GaTBVbzVVNzBOdk9WQlJoRTJMeUYwNnpZdkRX?= =?utf-8?B?cHFTdXpSQXZPalVJeHBOVEFkZVhIekFXNWttVnZjYy82YWg0d2grUkFxdzBF?= =?utf-8?Q?yCp/n2RyKIm/AJaI=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77c54e2f-6473-46a6-bd82-08df312654d8 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2026 16:54:41.7608 (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: nq481k4MMbgA8tv/uG4UNbQnIWVd8KjUPcyjjatdm5ZGBo8lekHwQEEz/9cZ3EaKdIF0ZeapeKY+O98phacYsVk8K8TQEc2zuo0jyaY1ye0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU4PR08MB11747 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..8f2722dc671 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 leaves 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