From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11020119.outbound.protection.outlook.com [52.101.69.119]) by lore.virtuozzo.com (Postfix) with ESMTPS id 28D09807AB for ; Tue, 6 Oct 2026 10:34:46 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=q1s48644m/3P1hM+tzlwbv8clSVAAJYMVfBMoGzQh+VyvG8oa9MIUO2Ooix/szGVyeoJFgg+1pFYMDfSmisPrT/NwF5oIW9eATlI+1O6czQGYONkSL0w0kHiDPQ/awzPBLtuGZpBxTrPp+zV0eD7vBxdXeNl683D3p72CVEHPlTJ1rdvIl8RnHk4NJSnQOOE94cR8UhweHTdQIwuXJlK6AtaoLtLz/nQcs34vH4CS0AohihMYQd9IcJylrDfTytWRJkR3ba/Mzemwp1Peqeiut+ZrTDYqL5HUGK66Fvla33LAzbY2tkom+d3H09ekR/3u5nDqMGBuAtZSD3er7YWVg== 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=bNz9bk9xVS7s5kx3qxUBqiEok1Y+b09NByUYPeyLg5k=; b=SpjanFLoJ1Nk0Fkg4MzTeW17ER5Wx/9kUtO+X0ZRWQaTYPzmGVrXIzxrOE0FbEZfOFV+vtxsbzlnt4GOuknbYJuFaZBX58rorElHBiSDabfr3RJe6SPHhGR2j+iJQEXGPBz/4pqXeQJ0H85lM7sIIKGNjs7PXnHLzLFBqT50JiVf2tTMe3vZri0Y0MgtXts6LpuyaQqY2tTncwqDzccqmINufRi9+Zui7OT3pV1aRGcvcgsNBFS5hYet8JYCfn9g3emYDWJZL+DSLY6GBllot+V184toet8+rkEh6eq/hz5gdTJznVKnG+bBZ04CVd2yMSA06GAmy4xvlhu2uuSLPg== 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=bNz9bk9xVS7s5kx3qxUBqiEok1Y+b09NByUYPeyLg5k=; b=l1bbv/Fz7UYuTOQwzZoW6R09FZ6ugFMfG2YYrhYTKQ/77CiVmneHtg+kKlJPc9jJRR0Mwy2qpun4ioVFd+wGcdHjOtjrw1feI2Gq+zeDqo9WTflEoaY47kT5OWrBNqsQMfrMU09loeiT3VREroBGKuRxbtylJC3hxzJZfErCxIb+aw7GBN73uxc0/XksdD4Thf+5Aaww6EGN70w0jIXTexUMkv+APzRJCwbnxoKufCxmTqShMMESIsJf7kymil5QClvMEOcWb9tBNrbl8CoPb5TCuExzwPD27IpEnv0TDclAqFax2tR9LzNM2THD6jeVNBqqSuhhRJTVYcDpGJxlow== 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 GV1PR08MB8692.eurprd08.prod.outlook.com (2603:10a6:150:86::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.14; Tue, 6 Oct 2026 10:34:44 +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.0496.010; Tue, 6 Oct 2026 10:34:44 +0000 From: Andrey Drobyshev Date: Tue, 06 Oct 2026 13:34:36 +0300 Subject: [PATCH QEMU HCI-8.0 v6 12/12] usb-host: make CPR migration blocker conditional #VSTOR-137800 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261006-usb-host_v3-v6-12-8688ec9576d1@virtuozzo.com> References: <20261006-usb-host_v3-v6-0-8688ec9576d1@virtuozzo.com> In-Reply-To: <20261006-usb-host_v3-v6-0-8688ec9576d1@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR09CA0115.eurprd09.prod.outlook.com (2603:10a6:803:78::38) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|GV1PR08MB8692:EE_ X-MS-Office365-Filtering-Correlation-Id: 889abe4f-d9a7-4680-fbd7-08df23956ade 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|52116014|376014|23010399003|1800799024|366016|10067099003|56012099006|5113699003|6133799003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: zScFeyTae5/N24TRrTHNcDXI8fQ8W4Fqr+GIxR+rsw7beXDooWVkUl+hdPJAkpMgqbQlWsorqZS+9fhB+wbMTfCe8ZYLaDvdQRtyg4vip1ObsNeuARfRVMvdZz4eFd43+obkMdNGygW5sWnTyAhUYP4XQZBfoVjSVQUe6YhLel6HA+97pfMd7JfSqEU93xFImldV7MXknHH80dZn2sJoRdMaUfh9BDGBmNn/suVceyHxCKK/t/2nCM9YPWbfMvoB8YdHU7CHOFyyMsPaolGolrGhnpJT+Ha8TA2SIG3uTiq9n2MEwbOxxsJAeouiKv1UWajyRgBQPpt5EJM4ESiBf8qrFMlf9rV8ho4uJREgNJoyhRNQjm4tNqipFkJY5wtVvZCKPxDAPJ+rcgOjcQXYJrGU+W7ZE7ibo0D3Cxl1P4pAdwz8cmKkVp83Qs7v+xGRwQ5zWqlXkikr4HqLgV5knm2vfSliBtE+jBTwJSNK33nTQ1lSagQjQVQ0ORJF8qvH5Q2FnpRvEsM7YHbkt7YRWL4wSJN3r+qXlwq57+CjopAQB6ZUAP86XDmItvUkHdIgscGHADa4xfwknTRPEtY+zhR83onx/CQRTXBiQVOK6R9piiwYFCmmAsOHeAgO1ccv+uYS4X4bcUnpuWVWlRmlm9Ij5GmRxDJfsX+kUcHYrygwJOQ8bvOX9xqQSR0Zx8FJvsWdj4gDSkDAX9ealF035fQPtWtAHY1pSVJs3edLMlI= 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)(52116014)(376014)(23010399003)(1800799024)(366016)(10067099003)(56012099006)(5113699003)(6133799003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eUtOeldrVy90YVlSZ2JvZjJvU0Vwc1dHWmFMME5SNXU5dHBVbThUNThtcy9H?= =?utf-8?B?bnhqRU5RY3Yzd2dmZ3NtTHlZUlhFNW5maUU1SlFTcU1UZEhlYThzL3lwSjVm?= =?utf-8?B?VmRvZUVCaXpkVmQ3a0xvckhUd0JhQlJOREJnYTJMUVJBTUhCZjJmdWNjZW1n?= =?utf-8?B?QzI5MUJtMlgwZXVmL0xHWm1BUmZSTmJiOUtDaHNNRFhFK3BtVTRGcVFDMHZK?= =?utf-8?B?S0NicjVvaGJXOEF3Y1cyRXJkdWNhcE1SU1I5czR3YSs4d29GSGNteFlnTTM3?= =?utf-8?B?WWpWYzZBNTMycW5uZnNPZFV6RGprQUNIT0VMdk9ncG1UZHFlSURCWCtmUHpO?= =?utf-8?B?OXRpU1lMbyszMlRmQm9mdGo2NDhXK09TVTN2MHZPTzd3NytoQ1ZjcTZpUlJi?= =?utf-8?B?UGdVYTd0RWEwQ3V0Wm9HSVNDTEhyU1J5VlZmbjZFc0Zrb3Vmelh1QTQyaXpY?= =?utf-8?B?WloyNkQ2TjBkeTBJNi84aDZFZG1PczdMbVZVdnpMbFAvOThCWFZBM0w0SnpQ?= =?utf-8?B?RDNxczF2NHRnZlBQYnM4aDhDdGsyM1F2a1pzWlNYdGVqdXExZXNCQmxHV25s?= =?utf-8?B?WmwycFRrVEg5OWJ4YXAwNlVVby9VS05XMVR4UU56MjVZK2dZdUp3c0lzN0U4?= =?utf-8?B?aWRRQ2pWNkNYa1lPT3plamZCUklRTGR5b1FCTm9HdWZoRGFBT0lhQ3FBVENR?= =?utf-8?B?SnhKVWpwNEhvcnZKSFA1UDJUNnFxQnp2MDNEUnlwUjlheDdZQXNvbkpUbTMv?= =?utf-8?B?NUlXckFWUmI0M2FqbzJMblEwY2pNQVRPREU0OE1HSTY2R0FwMUd5SmMrZ1da?= =?utf-8?B?cFB2U0R6QTZ1UTN0VkRhMnNDZnFrclo2Y1FCV3ZsbFdNekp1c0pTamxFWjgr?= =?utf-8?B?aThXZzNNUVpKZjN4OVBKSEdIb25QRGJzTDRpZTRnSUx6enJRTVpXdll1enpV?= =?utf-8?B?OGRjMHlVTEg2NlkvOTQ4ZGhBR0x2Qkw0aUpISTByUTBCYlYvY1dhZGpIM3ZQ?= =?utf-8?B?NnQxcFRjKzBrQ3RhL1Q4QUFKY2RmYUtZSTBIck5FK0lUUjkrRThUa0liU3Zp?= =?utf-8?B?SHg5c08rSnlNWlZpZjRiUU54Ty81STVFZ1dJMnE4dTF3dXFwTWNWUDZUOEg2?= =?utf-8?B?dWlXQUVpWlBxTmFFOXdKT1RTWmJ4WG01dHlBSmVsY1JKdnp4dG5lWjRRWHRU?= =?utf-8?B?bkEwamJXbGlwQUZYNVM5R1hKbnZnR0lNMWJob0lkNklIbGs5WkplSEhlZ1Jw?= =?utf-8?B?K29paUlsUWlPTTVoQkI5NWlOV0s2MzIxdWdHM1MxbWFSdlN5ckFNZGF3NU1Y?= =?utf-8?B?Q2lzQmtZcHk0YTRmUnpHUWJFSWlZc2FWOTRic0ZzNkpzOCtTcXdXRnhIb0Zw?= =?utf-8?B?ZGVLU2h4bmt4SVB5cWpBc3RxMlM0bHFGbmx3alZrT3dDNkhhbjdFZXJ6RFlq?= =?utf-8?B?a2xORG9KbkZTUDViaG4rOVVvcUxKMUl0elRGcXJQeFZvZjBNTGViV2lEd1VV?= =?utf-8?B?YU5iZlNFcFRBR3RSbUZudzFZRWtrUFFkMEVHVnFlaDczMno2UFdtV0RtamNU?= =?utf-8?B?aDZVNTFaSEdoSDQ5cURGVm5QYXJLcnBLRm9OTmNPdXpibXNNK2FDOUpWZm5w?= =?utf-8?B?YzBabjZPWlBzYWlEMllkaGZDaFhnMEZRN0R0MFo3T2JhVUVLRzBiT3hpVVBw?= =?utf-8?B?Mk0xbjJjM3QwSnVmckdRTjNuczVxV3dDZElGYWhuZFl3ZVYwWSsrdHlPSkNK?= =?utf-8?B?U0pkM0E2RW9TUUhCYWNmOUtnMjJ1Z0thazdJL2poZmNtU1lTOFJTZjlOTjZ0?= =?utf-8?B?dUFGR0FZWUFvTUU1OUM0OGc3aFFtVU1saXNaK0dXb2hPWnFoUmhvZlo0dHl1?= =?utf-8?B?MndYbHpMWGczRVpWYnEraWVONGY5Wmxpd3QwbVVkRnNPWVowUEliWDZSd0lQ?= =?utf-8?B?ZVUzNXZtK2VzVDI2aGtVNWxaaXM4aWlSZllJVlpaTjZyYmVDWkdDdERLajNs?= =?utf-8?B?cXcwS3Q1UC85Q2F1QjJKVFduLzdranU4RXZ5WVhmOUNaa2tpWXhGaHI1T2ly?= =?utf-8?B?K2lSOXp2MytRWmw5OUhyT0RFSjBIWUtNdWtFV2l2MjRaTjVydk5xaUo3OVVp?= =?utf-8?B?MGNheS9oN203c2VreGs3MjNVQzRDQmFrVk5CcnhtNjFmMTgrZUxteDYrVnpF?= =?utf-8?B?RlRXbDIxTWZUYXhQS0JZSG44cExRZGVxT281ZjNDY21XREVMcldjSEJacHBQ?= =?utf-8?B?Z1lwdkJtbjJYRTFiLzVmZ3U0dHZ2bFdHK01ES1hQRUhtM1ZLenJ1bG5kZnow?= =?utf-8?B?N2lIYXZLMXJVMjlla1I5YTNsbW5HR2dYOHpQWEI4czBBR0RUbVhOUFp3aDRR?= =?utf-8?Q?iiiVLe7Z7sNQnn/M=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 889abe4f-d9a7-4680-fbd7-08df23956ade X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2026 10:34:36.1069 (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: BbE/r5dFQLLIAbJOi3OBARU1VaZ93yedvC0SJ6wegbhsZm6JAV1BOyTEtHmcjkSX5Kbg/XrAP2+o0e/d3kac9g5NF/p+dYUHJj923/K4vXc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR08MB8692 A previous commit added an unconditional blocker for CPR migrations. That is to refuse CPR gracefully instead of crashing and for the previous commits to remain bisectable. Now the restore path is complete: the FD is preserved, in-flight URBs are drained and replayed, the device is handed off across cpr-transfer, and the endpoints and isochronous streams are reconstructed on the target. So let's lift the CPR blocker for the devices which satisfy the preconditions. Still, the remaining preconditions for CPR to work are: * We must open host device FD ourselves, so that libusb owns the FD. This way we're able to preserve the FD during CPR; * Device ID must be provided as a unique stable key for CPR FD registry. Use them to guard the blocker addition. Apart from that, prohibit CPR on WIN32 platform and on hosts with older libusb versions. Signed-off-by: Andrey Drobyshev --- hw/usb/host-libusb.c | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index b3c46aa8de0..258e1d5c471 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -1524,16 +1524,39 @@ static void usb_host_realize(USBDevice *udev, Error **errp) usb_host_auto_check(NULL); } - error_setg(&s->cpr_blocker, "usb-host device %s does not support CPR", +#ifdef CONFIG_WIN32 + error_setg(&s->cpr_blocker, + "usb-host device %s does not support CPR: " + "WIN32 platform is not supported", DEVICE(s)->id ?: "(anonymous)"); - if (migrate_add_blocker_modes(&s->cpr_blocker, errp, - MIG_MODE_CPR_TRANSFER, - MIG_MODE_CPR_EXEC, -1) < 0) { - if (s->needs_autoscan) { - QTAILQ_REMOVE(&hostdevs, s, next); +#elif LIBUSB_API_VERSION < 0x01000107 + error_setg(&s->cpr_blocker, + "usb-host device %s does not support CPR: " + "libusb API version 0x%08x is too old", + DEVICE(s)->id ?: "(anonymous)", (unsigned) LIBUSB_API_VERSION); +#else + if (!(s->hostdevice && DEVICE(s)->id)) { + /* + * CPR needs the host fd owned by libusb (the hostdevice= property) + * and a device id to key the CPR fd registry. + */ + error_setg(&s->cpr_blocker, + "usb-host device %s does not support CPR: " + "hostdevice= and a device id are required", + DEVICE(s)->id ?: "(anonymous)"); + } +#endif + + if (s->cpr_blocker) { + if (migrate_add_blocker_modes(&s->cpr_blocker, errp, + MIG_MODE_CPR_TRANSFER, + MIG_MODE_CPR_EXEC, -1) < 0) { + if (s->needs_autoscan) { + QTAILQ_REMOVE(&hostdevs, s, next); + } + usb_host_close(s); + return; } - usb_host_close(s); - return; } s->exit.notify = usb_host_exit_notifier; -- 2.47.1