From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11023122.outbound.protection.outlook.com [52.101.83.122]) by lore.virtuozzo.com (Postfix) with ESMTPS id 645DC802A7 for ; Tue, 6 Oct 2026 16:28:01 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k5H+QF74VyGGNZSlmXdZFexMOzVOuUXS2oL4Dr6lrv3a8WqLhg1hOLAjdVNFCNysmklE983p46cfmHcgUACEqqJ6VX7X7PGV2FI7uZFzxOz+WP0nxmhHF+s8/MjvJgxgGStia21YO+z/+hYYTLjRvllmNAjmTC5Lfb+o6kzMlROVUeeKa33XGs1mWY590AG+SFugqfYU2mc+fWCaE4paCl2Hq1gMI/+hr+tJgifJ9r35OJTdQLDMcBL893CFA/2P9vrb4YBOfNuJ1iaS72vexgddIejSNh+bOr6spOM/PeCrtOVTwSyYhKUySfP3lvC9D/5csWzHhzH0XEXuM0XVMQ== 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=lTMiwa2B4ig7OFIc2vgUrefxfe3kXKKGm0u3wYHwS7I=; b=bGg1D7WdN1BkYavTPVQbMKQkqydRrPuiNI3WYaZOS09czGNSZAq3mt0ZXNVfh0ItwBdRsTRjoIDudFzjE59OwpCbmueRvatCvSmD6IAypIQffraGMKuOy26hIjIG3EwAfgXzNhTKx5iXOSOXfQkaW15BY56pXWpqhjTmi+LUtpZwlPbTReuLdDnuiQhG4nvhE4bQV0B25dBM0lfXAKHryBRxKYuMk9ZuzDRB7IO7y+ymSByhdYjMc8ejHQkANlkPptsdxh6bRSfombR7Rfveyw9+klDfou7fiKw8IPoNvng2BZIp0tHKB76J8Hoc/M5Jf2qz+s1zBKOSOmdARaqnaw== 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=lTMiwa2B4ig7OFIc2vgUrefxfe3kXKKGm0u3wYHwS7I=; b=kp+z06jz5hQ7gI1ARzBqzBMDysf/Zo9EB1y8EDwGLIIs7TNOeGVZ6SVwXJO1nUMZ1lk/diXjO68JAHjFItD2eqKp7pR7mhTC/2eIbfv0PW59cU5WcHrmmzps9TS0WboUzWRGn8zF2sgq9ODezQPEdyuhSA5yQ+kLIF059qdLzFax/oSwer49y2yeucve7gozhWi757jlnh8BVO7rHv/RlmPyuN1XYZnZaYs2XU+QJ26ebMVOHMTMcSRBgcgjzo9EmbnVyDyG2iHLvJQG5gId6ThblJJnr8rzZTMUeADZUjMbNiu0GDAxNBY9HJFZygLMvnMZCmUT/nBzg4gdb8GAow== 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 PAVPR08MB8848.eurprd08.prod.outlook.com (2603:10a6:102:321::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.472.15; Tue, 6 Oct 2026 16:27:54 +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:27:54 +0000 From: Andrey Drobyshev Subject: [PATCH QEMU HCI-8.0 v8 00/14] usb-host: support CPR migration Date: Tue, 06 Oct 2026 19:27:51 +0300 Message-Id: <20261006-usb-host_v3-v8-0-72ae4fb8977b@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-B4-Tracking: v=1; b=H4sIAIchxWoC/33Qy0rEMBQG4FcZsjZD7klnJYigCxcuXIlILqc2g hNJ2qIz9N1NK8iMFiGbc/n+AzmiAjlCQbvNEWUYY4lpXwtzsUG+s/sXwDHUGjHCFGmowENxuEu lfx45dq4Fa1SgwQZUxXuGNn4saY/o/vruYW7eXN1isyXo6XuhDO4VfD9nztMulj7lz+X+yBe4e qo+gr3g1nDhgVB1OcbcD+lwSFuf3pb0UZx49suL6qn3wrhWcQJ6zctTL8+9rB6kY1QzEZwIa17 9eEqIOveqeqOMAd9IXb9szet/vK6eCNEqZbRp7B8/TdMXOLIRH80BAAA= X-Change-ID: 20260914-usb-host_v3-bbfea86d1dad 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_|PAVPR08MB8848:EE_ X-MS-Office365-Filtering-Correlation-Id: 7d664ebd-0e32-4cb1-27b2-08df23c6c61e X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com 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|52116014|1800799024|366016|376014|23010399003|5113699003|38350700014|18002099003|6133799003|10067099003|56012099006; X-Microsoft-Antispam-Message-Info: 4TC723T1cLN4J1eZ7P/UyrqGyuFZFYkOTdwmeiMKnV4BGKwoZ/JRkTfE0YGATKFrybTFdU8v3TR2f/4J/pnFFY/MFZsPkYsnh92M2miSrkgBOtsILyVLImMYLPE+tecZkRw5L43CX9kytGss31PeGNUT+A+Z4JbTug6M72wVpkqVmb0jbgTVqXfslctur72UBG0cSj5aoTyyax/jgCF8G+BChZjJH/L5l0y9cau73BS7sqv2/4MgTIs/mJdCZSpsLye1RU7JS8IN/RiOwAdm9rm2wHNOm9PPhcdSi2AvFGhSfuKQYzsnL3bBPGi2eMaqxVZQ1K+dNW16+DP9Y3CAM9fZkMJnVPSRnUfDJJ4roxSB3VXe3g/62wNk77A9q/45sOSVr7OoikLW2qSpdrju+t4Jpspwxq388UqkffhFM0cjlt4+tQ2RnsuxYrAYA8cHJh4iWUG493kMYlzqbLi8HO5KqSANc8BxDX9miqaVNtq5gxN00EgCmNKmYyunSb50+5mqCEtUkXkZht0sJdvkgEsiWffURVe4Y4d8WJRGKftj1a6+uV5BMENnY+qU9C8FZ/Vxh5ZvqCV02JahUP1UAAzQmzdIAyAvkLLecnJ3uumFAYaeWuYyrw006Fh5y4FhNeVJ/vc52gUN3B+bCWw4FkeI0cEU2pl6+72QAbV8QZ4= 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)(1800799024)(366016)(376014)(23010399003)(5113699003)(38350700014)(18002099003)(6133799003)(10067099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Wml5c3BIWFFaVnJMUURGQkhubHREL3RvSGhMelU1dFQ3OG1IWU1WWHJZMkds?= =?utf-8?B?eVhhRDhGb25OQXYxSG41ekhjQmJQQW9UbGJkTXBIcTA5N3Nkano1THpQcDJI?= =?utf-8?B?aFdzeS8zejJhR21jd0ZxdU14M2FQcEd4dDZCVGRFc3NnTC9SUk1rRXZBNnF3?= =?utf-8?B?dy9rT09XL3ZKV2N3dVpGelhna09Td1MvcVRIUHpVTXJDSXFGUDhXZ09Idi9L?= =?utf-8?B?RzJETTBaeFgwOGV6SktkV1F6OGhMVHZzRVBOMmRBbFRqd0YxZkdTaUp1TVR2?= =?utf-8?B?WjFMZzF6bmZPYTB2aWtYbEE3d3ExdU16eXJsMkVINW1XMmpqWG9DVnVQalVM?= =?utf-8?B?dW1nNVdWaEZwOVB6NmtzMGRGRE4yczVvRVc5TzdPK1ZEbUd4cDNMYlJ0eGZp?= =?utf-8?B?Q0ZYaXlSTTEwa1pucHUrejgzZVFpM1dBR2NGekc4bzFNRHB2L0oycEZQd1Vu?= =?utf-8?B?MUNMRjJmeTROWDVwSzBseXJBcGVRRHRUTjNjbVNiOHVCRmZlOGVHeWxxRVdV?= =?utf-8?B?cFlFaHRwVGJpTFFRZnNYYVlBNk1JNTQ4RE9Sd2NmNGRQS2lPYWhIOVI4Ulk4?= =?utf-8?B?T000dXF4aWRYdmZoV0VidXlVVWlxMGxSMldtYlJoOU91ZmhGUFJsRTYyVDIv?= =?utf-8?B?dzFUT1phUlZtTHhPejFqY3QrU2h1Q0lNVEhTeEZ2NUdPdWNvOTRtK1B6S2l6?= =?utf-8?B?Ty9uZTZQdE5jejExY2hhWkZIV0F1aVV2Y3NTTHAwTXZ4by9MZmNTNExPMWdl?= =?utf-8?B?bDRSVGUydnQxd1RINXRSWVJWTnZrWXR5cURsdTZRTG8vT1pncTE2S1R2dlRh?= =?utf-8?B?Z29BR2ZGR0tTWTdHNi9ZZ0RQMlhYdytrdHRnc0ZjZWlOUTlaaTRXaHp1bW10?= =?utf-8?B?cVpUMVYzOXEzOHVRdGd1cW92dFNaUkdYMjR3L2Yyc0JxQllOeWJ0bm1GUlFq?= =?utf-8?B?aU1CZGdCNDVZZ0tqbWpsSDJMRmpGSWxXKzl4WHl6Z3g3SWhPRGdLbzhISldY?= =?utf-8?B?RmRyZDFiZy9DTmhJc1VFNzRrVFlvUlBYV0xkb0gzSmZScEI5TUhyaUtpWjlq?= =?utf-8?B?UmE5cnFJVDk0clhqbCtGUDNIcGw0TUg2Umt5NVVTMHMxT1loOGVyVU01djFk?= =?utf-8?B?VjV4MkVSMG1IeStXUDNSNXY4U0c5Y0k4Z21iUVhnTnhYNUovendQQjFNOEJS?= =?utf-8?B?b0JDTkg3alI2R2hnbThhWFFTb2VPTzFmclJ4K1hUQi9YU3U5VDVGZzRhYWZL?= =?utf-8?B?bnJ1anpRWkg0Y3VLcGlqUVZjWUlRMjY2RE1MSGJpMnozSExib3JmK01uOFAr?= =?utf-8?B?cit3NHJ2Q2o0dmVLVUNPOG0vNTJWR1hLRUFoZXB0UFNucW4vN1pSRHJYamtz?= =?utf-8?B?WTJIQW9KRmFWejFpYTJtNWkreEd6cW84OEp4VmNSZkpDSHFOWmhuNUJWRHJi?= =?utf-8?B?RExJQUtMR0lPNjYzUnhDc3FqdStWM0I2N3RYYlRndTJISHVvWkpVcGNtcFFP?= =?utf-8?B?alBYVnpCSDg4SVAwK0pGQVpqd0NwYzBSYU9vR0xNSllPeFdxektrNS95SHdQ?= =?utf-8?B?bGdUYW9uNTJLTHlLQ0RLNjF2anozK2NZSXZGbWk0QkFGZ3NTZGtkTm9qSGdP?= =?utf-8?B?b0pZcGJ4VTVqeldwdDJXTjVoNWhraEVLeTMrZVh5NXZoQjZQWGVUS0VKRTRW?= =?utf-8?B?MTc3cVNVMGVDMm5lZW1rM1d1SjIydHFxUklZOE1lZDJPZDNJOUdRdkowb21T?= =?utf-8?B?WUNWdFZZT2kyQ2kwSDNLNDE0SHFud1JxdzIwQ2kyUk1pUTFvU3E0VDBhY0Ji?= =?utf-8?B?LzBxOGdZQWJZZkRtS3FaNUJHUkczbkx5U1dtOXlCWVYxeUV2TTByTmZtUE0r?= =?utf-8?B?QmJkOHJQSEIySDZCRXUvelhkSVJvSTAzbTIxTldoU3A5eXRWenhoQTVCKzJS?= =?utf-8?B?NkI4Q1FsZUpnM1FSVnJrcGRkV21QK1RzTmNIenVEenZhUkhtVXZhRDRPS2Yv?= =?utf-8?B?QnZWcDRqMnVIQWVudFdCc3h1L2hKVVhwVEI5TVM2SmNRSDVDNFg3cE50cEhU?= =?utf-8?B?Vk8zMldNdERsWlZMaXFYVVBycHVMZEFBMVY3aGJYWE1zK2h0R001dUUzQ3dW?= =?utf-8?B?SlRYT0IxazlYODJTNGZFa0hmekFoSHZaVWdtNTRpOUhVNUNGM0htTTBHTVNW?= =?utf-8?B?VEVGSkF5c0s1aCtNOU0yUW44cjNDa3dDZHlBTURFcytOZFQ5eUhQYkwrdmZy?= =?utf-8?B?K0VQWjloZlZEdDNiY0ZNOC9DVHN0M0JPOFVXczdlRU50UjN3c1lqdmdIWGkz?= =?utf-8?B?YmdOWjIrUlg2ekFURk9va2JYU1Q0Zk96eDhIRDRDVVVuMXlQSFRDN0FxSURH?= =?utf-8?Q?CAOkvn+gmUbylMEA=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7d664ebd-0e32-4cb1-27b2-08df23c6c61e 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:54.5780 (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: womW81e5tGxSMthN3qXcmDBYU9AuUV0T91C37H54MvDdNEmDgMl+vxfTFvAuMc6qQgW6RYwl+EdvhNfS5fc9GOR0XkjVXMD13Qoepc2d7z8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB8848 v7 -> v8: Fixes for the issues from Sashiko's v7 review that were verified real: https://sashiko.vzint.dev/#/patchset/20261006-usb-host_v3-v7-0-044f668789a1@virtuozzo.com Functional fixes: - hand off: the cpr-transfer target now marks the device as not owned until .post_load() completes the takeover, so a target failing the incoming migration no longer resets the shared device and releases its interfaces underneath the still-live source on exit - drain: re-cancel in-flight iso URBs on every reap iteration -- reaping an iso IN URB wakes the endpoint, and xHCI can submit fresh iso URBs mid-drain, which previously escaped cancellation - drain: an OUT transfer cancelled after moving some data is now delivered with the actually-consumed length instead of the full submit-time size Minor hardening: - usb_host_req_cpr_replay() is gated on an active drain - NULL-dh guard in the CPR target's interface reclaim - unrealize() restarts the event reaping it had stopped, when it still owns the device v7: http://lore.virtuozzo.com/20261006-usb-host_v3-v7-0-044f668789a1@virtuozzo.com Signed-off-by: Andrey Drobyshev --- Andrey Drobyshev (14): usb-host: don't leak hostdev FD on open failure #VSTOR-137800 usb-host: don't leak config descriptor on claim 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: factor out usb_host_start_events() #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 | 25 +++ hw/usb/host-libusb.c | 605 ++++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 613 insertions(+), 53 deletions(-) --- base-commit: f3c1d9ef263edfab8d2a273078493bb766dcf8f8 change-id: 20260914-usb-host_v3-bbfea86d1dad Best regards, -- Andrey Drobyshev