From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021107.outbound.protection.outlook.com [40.107.130.107]) by lore.virtuozzo.com (Postfix) with ESMTPS id 3AAC5807CE for ; Tue, 6 Oct 2026 16:28:06 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Rp54QfQiLSSRXGDPfq0/4CAqvJhfTc2uwivQhSCO/o9eFo49X6RwMHBFZwn4ZPd9UlAJoqKmB7NkmJtcU130e+Ya9lYRxE/x2k3eEp4UP4CT1m7owpNg5GWjTKZwmxZ+Yi5OEa4vf6RJ/fvKKdcqUMaP/nDvSrQWu2Nec4LbPtHR9Wew0TleUPXiOGkOtJRbESoCzYtZSo4+P2g+1TpXmQJ4/IjhmqKo7dbpHjTv5nUj67q15EHHrbDnOGUS0NeDze/zZ/7eDOGikhjCSxNIC0UCZOinLXMXfuUXTBl1J/NNN7HXZuESObMTTTSn3LPqLH2fI27BREBneCb9PeGydw== 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=4GHLf+yQmsYkyev6/de9GLwklvoxn9WoPmYKq6az+g8=; b=GPVn7dxMPImqddHBFB+brVoONQKIIsfiV974Kk3acqA6reTbY+O8lN3MhCJFsx2S60DxLEoqXuFf56FzPiFespxUC6/qpvi+AK6/iGSdep2W69hPTeVUFXF9ma0cukeCNYq+lYtKO5ILSje0gCeYb0fCBT5nBdIh3FkF9Iz8bmkL1Lz+cH4AJop964UwU/dyFG3bM5DjWYzdj61+iAdjBCjv5iMJaHZOyyx1HPD+cGiJsA/Nf3xKnjJJVYIiSODzRyc48+iXU9/fZNhbPeyoyu/PU8R8+EsODrJJvez4U9xuTH6aPDfaZEXOn+Wk3KCbfq/lCea07JGeBOS5of3mRg== 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=4GHLf+yQmsYkyev6/de9GLwklvoxn9WoPmYKq6az+g8=; b=YJWTfw0YVzCjiSStKcvWPPiWPV5mYva7y60t9qg89H5IHxhLBTSvs0pTV18sfoeA8Qr3tK4Y2wF+ynKcA1GWQRRWsiRZCzwFvOWP1fA8Ei5z+A5Ou5ydvXsdJW9tOVaW5ZdFEMhA/L90Jd66p/FyytA+81eVjtcvziX6NKgg7PilKcibXll2pHELCtBCoZcpYCd2d8Onh7EkB5wkkxaDGLv2klFodFX82pmVoVAUD7bHk+fPiBYT6wOPvMycbn0YyfjEOEEG7VPbimy80xCeTk1LY+Q7GqujeO1U+qCVZJPIChJBMui8FauU89b+Qj6uw2UZgE4PMdT1TYmjqRw8GQ== 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 AS8PR08MB8899.eurprd08.prod.outlook.com (2603:10a6:20b:5b6::19) 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 16:28:02 +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 16:28:02 +0000 From: Andrey Drobyshev Date: Tue, 06 Oct 2026 19:28:05 +0300 Subject: [PATCH QEMU HCI-8.0 v8 14/14] 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-v8-14-72ae4fb8977b@virtuozzo.com> References: <20261006-usb-host_v3-v8-0-72ae4fb8977b@virtuozzo.com> In-Reply-To: <20261006-usb-host_v3-v8-0-72ae4fb8977b@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR08CA0230.eurprd08.prod.outlook.com (2603:10a6:802:15::39) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS8PR08MB8899:EE_ X-MS-Office365-Filtering-Correlation-Id: a00853e6-70fc-4f79-b52e-08df23c6c95a 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|52116014|376014|23010399003|5113699003|6133799003|22082099003|18002099003|38350700014|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: DI7vmAznQm7RCzcxBs3O9E+e+4yLLebnrluDxSSCZaexASl1shBX6j50xOseu2fPseI9//n5gQzhijqIPN4r8k2EVyfN7JjVUG6dIWzidG6Xm5RHEKCjNXfJ6mo3WrgOIUEyDk3Snn7fm1PaNcMDd7FeXluQiUV0DDPpsnyiCbb6bGsXvV2xQsH+YmYvsC6vsaSPC4XOleKDmKS/0mK8TKZ6Yk0RQ9fWcrwlofOVNd+mswizsQ/gX3MEhbX6XBCxKaUizkTQZxbCSLiyO8Hgn9uLLuIwhYrkwaDGkXliSZzjlbaimkew9mcIIsHSXF8YKiR/uPPGidtn7i4IeHV9DKXaHlAGPvV+3R1TK91Xhv7gyvQaR3BPtUOCguGvE0AD0UQ0ETyrdMr/7Fxicewoor+Q7nik8UaS9nMDhZI5Ne0dBMLhX6eIRB8PWUW3sbgdJvKbwyWIYwHt9mQwbkycr8seT1kN90E32N1bNLCM37MhQhKhIjM9XQuk9VOswfklR+PuUT9w1hp8MpI5FZMEpynNiQUgMbG8nvcG4k6FNDtPn+eWBagqpl1+nxfCjBntuRkN+nS8ryauZFr5gf1nxIzDJW4AwUf1Z2OplE115wBhJKH107VTZDOiII52v6ydh/DzIwLxHaZuuuj4NM9QaQQ4QLZe5D7IRjwBoFPHFjCMxABNOOGl6FWq8eSOkPdmm1vmGGbRwEthnizdDJknp7lCeHvBIn5/tDwZe5tji/c= 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)(52116014)(376014)(23010399003)(5113699003)(6133799003)(22082099003)(18002099003)(38350700014)(56012099006)(10067099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RW1zK3ZqaHBNdDJHS2RSelJqSjN3bHdwNDlnVG9lR2ZLR255RlhsNVEra0FT?= =?utf-8?B?Q0RIWHhMTFVTQ3pUdE5XRmNScXVnaFJiU1hIT292aWtXNUpEblh4Mk9pNHM2?= =?utf-8?B?T29mdEhRam93V3BLSHlQRGlsS01LRFlMOWk3Zkwzam1rUlRxTWFHTWo5OVJh?= =?utf-8?B?R1pVdVgrRERZaFFNOXhiS3ozSkVUVDRqYnBXejlsLzNwcStuaGY3MkhsRjMw?= =?utf-8?B?R2YwM1lLbnVZQ2llZVcwUi8yYnZwb0V1L0JLVVVPcFhzKzNZYWt5Rkp6Wkg5?= =?utf-8?B?YWlZanhCRWNwYjJSZ1NYdXc0VjlVVVA5bk9xdHViWFdDL1ZvSW00eWlGaDNk?= =?utf-8?B?Tmg3QlRVZk1pNWxxQlRnc3ZhUXY1Nm93QW1VUkZsQ2RDa3dIcGhlR1hoZEZE?= =?utf-8?B?cHBKb25SR3NsRjl2dWdISEx2ZThnOFlZRVdaREh6c1dZOXRMZzJSTlhDN2Rp?= =?utf-8?B?RzVxVW4rSTB4a01oWUozNjBlY2JkYUJGcDRGaWs4WFExOGVMayszRWtHaXAy?= =?utf-8?B?M29FTWZlREdIamJKdkVwd0FKMHgrRTNxeG9UUkRLNGpETko3dEZKUjU4bEE0?= =?utf-8?B?WGhicGlGNUtjd1RSdnNUY3RUMWpSd3ZnQlZ2d0d1NU8wZmo0NlZ3YmJCM3JM?= =?utf-8?B?S2FiY2tYdERlRGhueVlPREZHYVB5bkk2eld1TFlVMVJFS2dkdHpldXZ0MVpU?= =?utf-8?B?MEV4aDlXZmQzUmNjYU8rS1lKa3NQN0oya3ZtZFRXZm9yMnArQ3NmYjNkZk9J?= =?utf-8?B?TkxsdTJwMy9JZExCNE5KeG5nTGV4N2wzdHBkYU42Y3dIbkp3SkgrK3l6NElz?= =?utf-8?B?RnFTcTRCT0xOQnVaanQzeFZFUktuaUduOW4wd2ZaWjdmMUNicFNTMjNqVTBo?= =?utf-8?B?RUxwL2lNV1VjU1FtaCtpUEo1NUVGUnQ4SUJyeEx6NHZzZERXbmlGWUUzaTFY?= =?utf-8?B?K0xkdllpUEQxYlQ4anpHaUREeUdoVnRUVzJEYzBHblpETmE5aGVaUmRIZkpW?= =?utf-8?B?YUpocUp2bnZJL3owK2tlbUx0Q1R4QTlhTExjejBpMVlrd0I0MzF0ZDFDbnJX?= =?utf-8?B?bGdieG1MUjRkVGZBaUdBclRieVNsM3U0S3AzMDh5WHVmRkdONjZGR3ZueVNk?= =?utf-8?B?cGs0QTBhWUVvbHkwZjBkbmFjclE0ZHJCaHo4M0hLYmFaUUJTaHRoQUplTXow?= =?utf-8?B?TWhhVzhYa3pteHQxYXZicTZ4b2xkYlVhY3BZN2EyMzhkdkE0TmN4RnB0SFYr?= =?utf-8?B?bkp6cWtwR0QrWVpiZVpBeW5hb3lHUW9iTjg1Uy92KzI1QnNPdFdmbUJvSEli?= =?utf-8?B?b2M2RkJuYmhrVWwyeXVjWXg3ZFpUcng5c3oyTkY1VUUzcUdUcG1xNlcwYmxP?= =?utf-8?B?enNpUFVXVm1iTWJVdU45V3Jld3pvREZKNWxHR2l0RUM2Wjk5Yi81RWJMTnNN?= =?utf-8?B?MURwL0cvVFUzUmpXYXArdnRuc29NUmh1d1BUbjNFYUlKNW1hMWZIMnJackdp?= =?utf-8?B?cDdnVXdyM3IyRTRramdpUFJjcTFtOWtGRHIxdEs2TGpMaFZCak1naEFzMDF2?= =?utf-8?B?SW1za0dWUk5GSE9UYWNEa3VBeUVnTjRaY21NNnQ0TVN2UmtIMzlaSC9oSkpa?= =?utf-8?B?ekZ2N29UWks1UGpwU1pKSC9CMWxuT2VHNjBLeDJyclUrYnkwaXlVQUFzMlFJ?= =?utf-8?B?VlZxOTREbFViRkYwV0VWWllISFA2YWtRVnBmbWRqTEpFZm9idnU2WGFOSVRM?= =?utf-8?B?VEsyeVcyYmxQWjZNU25QeFhhakx5V25jdWhJaTNWWkd0bkJ3ODNqamtUdm1a?= =?utf-8?B?VzR1QXhFbFU0Q1FYbVRFbEdVTDFiUVM0eVFLLzdmd2drUDdCNXhaclpYNTVa?= =?utf-8?B?V2xJMlZLWHQzU0xYVUZnendYU0Q5TmwwVHlDRXhVVVZsZlJsWlZQVTVoU3U0?= =?utf-8?B?RGdXUTR2ajlENzZ5ZGRsZ2RaNFRrS2RLbUNOY3liRWduWTl1KzIyb0xnV1My?= =?utf-8?B?NVJ1UFQ5TTNiNko0cXl0QVhlMmlDc0F3YkdzaVVabjNCVUdrblhLbkNZNzM2?= =?utf-8?B?QUVKK0YvSmZtRE85TmM2NGgyNHRxeFZDZmtqRDV4VDNlcmRyZ1BycUFGTWN6?= =?utf-8?B?VFI5SmVmRXNrWUNPNVppdnppMWJab2ZRWkx6am5neGxDelZwSDZJRnI0YW1M?= =?utf-8?B?R2VXdzF2bHF2WDczNkFBNzhrVGRtRXFQTlF3OXMvb29DQ0Z5c09MUXJMUEFK?= =?utf-8?B?R1UwU3lDWXhpNEpnRFhQRjVlODVLR2dlMVl6cnp1ck8vdHRJT0pLZ1o3alZa?= =?utf-8?B?VzBEZWNqVlRXQXhnQmhmWUhobWw0LzFZVHZkRXg5azUwMVZEYkc0UVJwQ3A4?= =?utf-8?Q?+xVqf9U7UrUNUUFI=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a00853e6-70fc-4f79-b52e-08df23c6c95a X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2026 16:27:59.9706 (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: 2qL2vGId4N5hzvYJ1y2XPjYEEwlpeIxfQVYb262cf8Fq87Hsf+AjIYV0pXVWNkW/vtbNpu2dFDnDT7S9zFm7OqwzQ70QGBEIHjFowVolQKg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB8899 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 076ba08533b..f88e6cde611 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -1580,16 +1580,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