From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11023091.outbound.protection.outlook.com [40.107.162.91]) by lore.virtuozzo.com (Postfix) with ESMTPS id AD1C5802BE for ; Fri, 4 Sep 2026 19:04:55 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aSlMerIW+11HwlEcyiUA35AthWtqeBpCx+9NYLHvri8/MmmAS4wFKzqP7wPuzAmnCdSCUcGA6RcqfLQx+5tFf/YDY+U/CwAUAFSrS3JxsDtLIJVHi1BWQdnGWpsTdfjxVcpLDZbtDUp930pcv3lDPM799OMqOVuErVFZF1OU6hg44io1lJWQhH/txCtt6bgZ8EgS/VDZKpf1kTnVzGjVdMirCujJNVzPR7WxFPXwfKVFqPKajTZXQY9gwt6OSkeFKP3lNl7T0dlSnzonLGPYPXIeg90RCc2bTmYfSr+vek9U40jn4JLKvy7kaFHsIfCjwpQhBmY6wl0HoOICJF2dpg== 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=g0GUXO0SOBJUj561J8sucQrDgXmXLmYEKz3iphyGSZQ=; b=aRs1c3PkFB3fbwG6T66lpDAtrdB2nF/ewdqnDGrb7xygDEtVIRMk5CKwS5T3o5XrXSV1Lf7ySKeolzMuhL7aPSfMjYZA6Ns4Wg6NWxnTnQBKDCT46p0ZBJcN/6y0fzsCr1hmkykQSVS+nJStUmGOK6nMg2dWj+2Zr5Y2+iNmQPjmGnCI14dBIyRcx2trR+VQL41onxhlWpQLjxzTAx2azcJnKbriypsmZL3xiLgJH9HaTVXWT9YwH8/ryXhYCqq4fFIJ967y8wpctI6fdAmH4ehzWjacorINIxy5QuYtrutjVzaZOrM4t4knqgeZj9abSudp2vvBToZWeO9Ze8xc4g== 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=g0GUXO0SOBJUj561J8sucQrDgXmXLmYEKz3iphyGSZQ=; b=Tdlv5J5lahYD96JYBX5GFsGvOVzf1BsIYveeOXknkZh7bwmQJ0uFeKC9QgwlD+s43oYyOTh9S9weiEo25WmahVBDLDmwGJTrt+osb+KJS0E6iWgW7f7WwZTUtI69Hnx6NPderhBcWS9M3jHB0jCFd6ilHtOx4R6EWpfdpR1hozgGgXc7wfWPDio2v8/uXTS28oJOs+/ek/Lujs7Ho2qno+RTKRyAijrm5/JXGpZhk4zurTibGwBq5aWwxsGycBxXzVOWOilBNyJ8k9kHfTBevRGKYMO3gomWFUlRvCLyTUTk3GvMPMV9eKTQvcU2N/wQQMZlD60UviqPcCiK57hvrQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from DBBPR08MB10650.eurprd08.prod.outlook.com (2603:10a6:10:52d::7) by DB9PR08MB9827.eurprd08.prod.outlook.com (2603:10a6:10:460::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Fri, 4 Sep 2026 19:04:53 +0000 Received: from DBBPR08MB10650.eurprd08.prod.outlook.com ([fe80::1b2a:832c:d136:a37c]) by DBBPR08MB10650.eurprd08.prod.outlook.com ([fe80::1b2a:832c:d136:a37c%5]) with mapi id 15.21.0382.007; Fri, 4 Sep 2026 19:04:52 +0000 From: Andrey Drobyshev To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org Subject: [QEMU HCI-8.0 PATCH v2 00/13] usb-host: support CPR migration Date: Fri, 4 Sep 2026 22:04:30 +0300 Message-ID: <20260904190443.795902-1-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: VI1PR07CA0215.eurprd07.prod.outlook.com (2603:10a6:802:58::18) To DBBPR08MB10650.eurprd08.prod.outlook.com (2603:10a6:10:52d::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DBBPR08MB10650:EE_|DB9PR08MB9827:EE_ X-MS-Office365-Filtering-Correlation-Id: 67fb7135-0ba1-497b-1e1f-08df0ab76607 List-Id: svt-core@virtuozzo.com X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|1800799024|23010399003|366016|38350700014|10067099003|6133799003|5113699003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: RZeAcQNgkIwkhoEk8JdnMivD6/YRoax36Cp2trVZa6E59YyuwWX+FkzCjlfPEwXrYxh0+0bwDlmrI1sPIENw/aH4pGvNcRbim3Dh0dRisqfslPjSurdekD5Pklwy7uQb6e4qaxozkyAJVxP33jndNl6qa2ROoPxjC8r6y0qqsYuUO0vlXyN0eAwEBqFmW8U/Z3nwf63Zrr1C+T1syzzv1wHEsw0SGPf5T0SXS7sOEFoqg09CBWuN3DRnl8IW93/Ak7hM8k/FQyYjkyHjq9oGggA/RJ2zO2IX6wNuhwZ9Loo9COtxcSC/K60Pq7PtcRXeWrFMef8FpbkndaPfKs3o6HBOzk1PR18+XSFZlkqeKZqwNRqFpEys2XlhZ3ssDIaakl8lW/Jmd8rUJ+47iYxWsC/us6XGCVh1NbU+EXdyruLdh72QnJ9WezePeWCPM35aNswfnHVNH4RQgOuv4XKbfvQz0FP6rMlSsf8VBiFb/mhJ05zDVZHINK5fEkF1t1jbzdIFX9ROj909txSyZJJx54G1Os/XQgBwBtxhqCPQXxkvFG0HWKMHIKvIsTBCXqz0w5EQnMEU2jnMxIZilk9ZFrwxOYzYcWnnt0S4mQBhGRZFPDiSla3VqpXZiiUAbUGGR0Deaq3/A5tO1UYd3wpNF/mIyxRPfXEzTcitHwfjR7a5hKBNKZ+zPScHJ1LCVAjKIxEAiwpStHdZECOsIjHmPS/dGwoA25/YkNpN+lctjEE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR08MB10650.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(1800799024)(23010399003)(366016)(38350700014)(10067099003)(6133799003)(5113699003)(18002099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ptOXxODUHh+bkOSKHHLETz53RZ9wf4ukygOtVnrn2WhCLxXS9gDgtms6qLzd?= =?us-ascii?Q?vF+vs2Xl2LL5kDOoHAWWgLuX+TsCDmRy/RY0UBVquHmdYSoUUtFIDM1RVdUu?= =?us-ascii?Q?CxhkOdCvTWnCji2+Zui75vgYtGiTrudOLGpCZrzVU1RLyfxGQ6lxESpZKAxR?= =?us-ascii?Q?z+P8qLs8cCW4BY007KNjEHwNl+S8Haa5ptcTs185mGO3s9UE9FjxCAht3Fae?= =?us-ascii?Q?B5xTNl0UUgUBT1bScQ8/WoOID+vqDOtOW6modQkifnBth7xfYj7dDR+aLr6J?= =?us-ascii?Q?UJWsFfsI/6FlZsewN0YDrA5x9xDzKxQ6vRXSJ+z3tGXpyVrhd2rAgi/jaaAu?= =?us-ascii?Q?z1jpgn/u9G7rePXl0bAbsCD7akTyvgqgZ3KAS6S3CvoSzbpH6/PsTm7euOcP?= =?us-ascii?Q?l75qJ2BmZWo7+pMLwqOiWU2rGxf502Kb/GqBWGVenLw/qO6/DMtML2yNGczQ?= =?us-ascii?Q?3Hg5k0upydRxpytW9QU6W8mbYbJ1aOyR4GxKKWZsB2nuO/pMoq7v6BzOSWhI?= =?us-ascii?Q?ZAZ6P+vKtDTmEzpzFjBxgXVWXzxuWWFit+gnSwboGkgal7nBwQpa8B5bborh?= =?us-ascii?Q?m9oG/eW9kRV9nTt7XhDDGqv7tEk4Hj2p++SKhzZgru9T8D50nGMK37e/bwxu?= =?us-ascii?Q?h5x9rDFC3bHZAWLdx36RTN1MFqFf1yuZm3UVibjBWpM7oJDXLZEzc3YHYvqO?= =?us-ascii?Q?zukOdgq3rvbNQyivAT8VKe0rr3qHhJLfZiEnfopKYeaYK9TizP292m6vJweq?= =?us-ascii?Q?nf51im+LqfweFwrB0D1fjSR1sslj1jw3DxLApGgc6xfIwdN0TybthTPirpPh?= =?us-ascii?Q?ZXXQ6T/AjReF82XhoU79tBTFfvlmxNp51CBBVo2vYOadFT7pEpkd9wNDjLQu?= =?us-ascii?Q?jQSb9FxGZ7Yg6+7npiUb65VmNwUSX7mrzFPXWj+eSQCXcoFfx1GPtdFrKBBS?= =?us-ascii?Q?Bk2jDe8ek2A+aY+fAi/JpAh7ZPA7H66Bwz9ys/6OC4qSvSeLndolwUMS3wOA?= =?us-ascii?Q?IMHHUkZpODaFMyutbdyqeosI89c4aTcrVW9KBa8BSKPeU2dZS3Tk7/gGmYlp?= =?us-ascii?Q?1g4M+eilKhfkJS7wDDFVZLpreJh0apJmoovJBtqK2gXgewdnznU16BMvr/i5?= =?us-ascii?Q?w1IScRzi2eHHonFqKppaHY721GHwEcCcAdEwOKdaTRnGCKM3DikSfEtPXDYj?= =?us-ascii?Q?YPxyB5AlD1ItAIGzbfdX6kUWXCWXiLLSbTcJ/M5gzzugOBSdT+ZJ4JIg1NAM?= =?us-ascii?Q?hpj2rrCGfTsUS7Z/nPcz//ggH062AVWRnS4sdoIszzTVT7VzWQI5G6CR5x/u?= =?us-ascii?Q?KIV8gvfpxUoUufo6YyYJOrlPzoSiAYC+zCujFG6hugzwt9hwFCOtfVonW6NA?= =?us-ascii?Q?evLckuSlqJx32SNTBP2FhmHWDYfa1DJU9SEtEndGDZxnwQBhuJhkkkCoeFM5?= =?us-ascii?Q?hytRl/QXPY8d813ulT2UpeWSQEepKndmSZG/EZMzKFVauDht4X0bpaIY9QOt?= =?us-ascii?Q?owvPm5oovM4R8eH9DpKFM1gYciUXrpwgUVmSrubs/omZ5OTOu3D37qJBxk8E?= =?us-ascii?Q?ugtT19eauLSqrMSq14m2xtn/iOroUaWDxHji8pX2kELNTFpzrQf5TI9cAQbk?= =?us-ascii?Q?ixKj74I47Dt4gVcWgxxMGBnrRwMMv04y8dUTNiVdON7MHgnxbE5YNFNZwSpj?= =?us-ascii?Q?WNZkKZdfpD/kekZvypBptalgSgsILTHgdE/YOyZzLKsNoEVJWkUbGyo0Q1ZD?= =?us-ascii?Q?2mSldFect9y3rQxAFZgOAWfSASnTUBw=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 67fb7135-0ba1-497b-1e1f-08df0ab76607 X-MS-Exchange-CrossTenant-AuthSource: DBBPR08MB10650.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2026 19:04:52.6881 (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: MJPxYpVjJBPtplTyV16rC+uR/ifjn4O1nN1cugEzJS6cV6B+UjUgsDg/rNEsXp+wG9u8n4VSqdjFpNOU/NsU3VDObtqEXpSm3H5391Q5Kl0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB9827 Significant rework from v1, adding cpr-transfer support, as well as support for ISO devices. Tested in L2 VM. I.e. L1 VM is launched with a bunch of emulated usb devices, which are later passed to L2 VM using usb-host driver. Namely, for L1: 1. USB disk (USB_ENDPOINT_XFER_CONTROL + USB_ENDPOINT_XFER_BULK):
2. CCID smartcard (USB_ENDPOINT_XFER_CONTROL + USB_ENDPOINT_XFER_BULK + USB_ENDPOINT_XFER_INT): cert1 cert2 cert3 /vz/pki
3. USB sound card (USB_ENDPOINT_XFER_CONTROL + USB_ENDPOINT_XFER_ISOC):
Then in L1: # lsusb ... Bus 001 Device 002: ID 08e6:4433 Gemalto (was Gemplus) GemPC433-Swap Bus 001 Device 003: ID 46f4:0002 QEMU QEMU USB Audio Bus 002 Device 002: ID 46f4:0001 QEMU QEMU USB HARDDRIVE And then when launching L2 VM: Disk: -device qemu-xhci,id=xhci \ -device usb-host,hostdevice=/dev/bus/usb/002/002,id=hostdev0,bus=xhci.0 Smartcard: -device qemu-xhci,id=xhci \ -device usb-host,hostdevice=/dev/bus/usb/001/002,id=hostdev1,bus=xhci.0 Sound card: -device qemu-xhci,id=xhci \ -device usb-host,hostdevice=/dev/bus/usb/001/003,id=hostdev2,bus=xhci.0 Finally, each device was under load during multiple consecutive CPR requests. That's how they were stress-tested approximately: Disk: dd if=/root/pat of=/dev/sda bs=1M count=4 oflag=direct conv=fsync dd if=/dev/sda of=/root/back bs=1M count=4 iflag=direct cmp /root/pat /root/back Card (power the card, read its ATR over CCID, byte-compare): opensc-tool -a | tr -d ' :' | grep -q Audio: aplay -D hw:0,0 -f S16_LE -r 48000 -c 2 -t raw /dev/zero # check that hw_ptr is advancing in /proc/asound/card0/pcm0p/sub0/status Stress-testing was also performed under ASan + UBsan. Andrey Drobyshev (13): migration/cpr: fix use-after-free in cpr_delete_fd() usb-host: don't leak hostdev FD on open failure #VSTOR-137800 usb-host: add migration blocker for CPR modes #VSTOR-137800 usb-host: preserve hostdev FD during CPR migration #VSTOR-137800 usb-host: factor out usb_host_reap_xfers() #VSTOR-137800 usb-host: drain in-flight URBs across CPR #VSTOR-137800 usb-host: re-issue drained URBs if CPR is aborted #VSTOR-137800 usb-host: skip product-string read on CPR incoming #VSTOR-137800 usb-host: hand off the device across cpr-transfer #VSTOR-137800 usb: migrate the interface altsetting #VSTOR-137800 usb-host: reconfigure endpoints on CPR incoming #VSTOR-137800 hcd-xhci: resync isochronous endpoints after CPR #VSTOR-137800 usb-host: make CPR migration blocker conditional #VSTOR-137800 hw/usb/bus.c | 36 +++++ hw/usb/hcd-xhci.c | 18 +++ hw/usb/host-libusb.c | 375 +++++++++++++++++++++++++++++++++++++++++-- migration/cpr.c | 3 +- 4 files changed, 418 insertions(+), 14 deletions(-) -- 2.47.1