From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023134.outbound.protection.outlook.com [52.101.72.134]) by lore.virtuozzo.com (Postfix) with ESMTPS id B93718017D for ; Tue, 6 Oct 2026 10:34:32 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Sio2gOs5r7zZOAMaZEoYBs1E/gajPGDHrFeHck1bpjX6LKW3TSCnUXuhYoPpF3dgrgDcz/AqybP3wAZKmEl5wYFSd/BxqfNjW+mDlzeBoW6U0pd5N2QP0pcShy+M/NE7CfLy5SIgLYISA86ztmG/7Ln1fcmTRIg6uvhglsjIwldwFC3aDT9MVEfd8sJayTEh0ZIy7KHWqfHosgXHrRysA74yXvgUcBGeGs2ivZIdruqdDrnieNOHtW3JTsVCn3KJjjQTmvJW40o4NDnialjKEGEFn+vn27upwEv6KeXKDP/NYumcWdza2EWLoL7SCKbL5c/McnEpVrGA1kCZsoV3Uw== 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=Wwx45WHp1/6WhWCW00lSkooPBCnkrwHelUfHaB6BAbQ=; b=khLHzZjYbUVnp0oH3SvzF3GNnERl4odG/EOOk/VxVJRbuJYC8yK7oN57XrczDacWjwcWL0SLkfEmNIPmkA0L4tlZoZGxJhxy1Y7qiYLFx8bmcPzWAczSVzwM0A/zAlzAFH5vmM4eE4ygUh/RXn0MBfdUq7kNL5H04WiVyd5CMq4cj/ZImX13qKsiXRz111IQivh7jvF78DGfjwSB75dIPQRhRBYCLh+mGueXJ4EFrW2GvqvRIoFNw4IW14lRjnWz378rO+2OoXPq22AlGShrgRrxgPM/YWLhBlRJdVrXNtXlcKIDIEMy0pjPAdlUXI4NuZGj9oAAqVw0SPQ96hxifg== 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=Wwx45WHp1/6WhWCW00lSkooPBCnkrwHelUfHaB6BAbQ=; b=cCCRFUjVGRp2sdZ6dfHOSIg11niiFiMBmP0JKf+XXlvc7h9wukpzSP4Z5YATieD8GXq7hOR3uDg6PZhF5lC+x4TvJoDMgo22JmgYqXvOLUXJbiwIY8/ZJ6wdiwQCR+yZsKkSl4jRD9Te4L0yENF1lyVKcZLiwnFIV/5Qz0IZGq3h8U1bp/E97AaaowuXPxwlSo9lT0moOYuTmhi96/aZu7M/RJu7FdbmbjLC6vs6IGeg4juCTPKyQiHnQCZn1EdGKA3nnvULEWdJmiG9BRCxlm+8M1vwx/1fKc7DeksoB61A4ZSD+g+sd70MLuLfs7imCT85U+aaDNFVuLzYfRd/ig== 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 DB8PR08MB5515.eurprd08.prod.outlook.com (2603:10a6:10:11f::9) 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:31 +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:30 +0000 From: Andrey Drobyshev Subject: [PATCH QEMU HCI-8.0 v6 00/12] usb-host: support CPR migration Date: Tue, 06 Oct 2026 13:34:24 +0300 Message-Id: <20261006-usb-host_v3-v6-0-8688ec9576d1@virtuozzo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-B4-Tracking: v=1; b=H4sIALDOxGoC/23NuwrCMBQG4FeRzEZya6xOggg6ODg4iUiTnNoIG kna4IW+u2ldVISznMv3nycK4C0ENB08kYdog3WX1MjhAOmquBwBW5N6xAiTZEIFboLClQv1IXK sVAlFLg01hUFJXD2U9tan7dBmsd52w+V8hfMRQfv3QWjUCXTdZXbbyoba+Xv/P/Ie/n2VimAte JFzoYFQOYvW1417PNxIu3OfHsWHZz9eJE+1FrkqJScw/uezT599+yx5yBSjYyaMEubXt237Akh b+vRNAQAA 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: 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_|DB8PR08MB5515:EE_ X-MS-Office365-Filtering-Correlation-Id: 0290b01c-84ed-427f-e9be-08df239567b6 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|366016|23010399003|52116014|1800799024|376014|38350700014|18002099003|6133799003|10067099003|56012099006|5113699003; X-Microsoft-Antispam-Message-Info: J/aZOBJm2dG5TOuSpr1QXSfa7yXiXMgG485QMHdZ6WcfI6l5YZwPdxgpEZClhgd73EYlBpGR6W3setbV26az8FCrj6YZud6CW5t+NLro/EGFj9oPJ6eafWEGvUfEVZCLlf+4kkvCcZCvk+hnSduay7twrIeq2HZSCJ/mgalSpNHoWvg8wdXizKELtsvJR6Aa//hNelUce9frXlT9qf5qXO0J7GjhNeYbNxH9KQZ2qRhcsSr330QDajzXz8m5e/mPLt1S8aseIxgGWAYWdP/i5jJ9imVoe20ZKs9yieme7mYW7zNILFyfpCG2bjKbDDSAtfrvWvkx0LNlmYgvStdZg+M6FvXQ4axHeUjF6fscG1UiK4/g76pqFeaO2KOIQcCftMstredqmQpBXvjIMqY97Sth9L5yXakNLevKHQ6LD7c31WJj+yyc4tyeALCsV2/VJX+WeNhFG6pba6gLhoelhbDwoCTheR8mJCYtelwS14uYvtgmYVRa1ffT27Eo94ZdOdEYrJmRqz3Quv8bc5cPLS7K2XLYibBEXvXDLGxUxPSGJp33FTYxp43l3x+o72rFC85e6Zqgukth0LdrIce3PfLFPC7NieZ9iIXyIg+M6KvNy6y53+kkar62mRxON7vz/KVag4scbWLBPuzJbbWlGfCkUsxCfiKDV5AprTfQEHk= 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)(23010399003)(52116014)(1800799024)(376014)(38350700014)(18002099003)(6133799003)(10067099003)(56012099006)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ajhsZG93bDArM2xHZWhQU21tRnEzMkk2TXJDRmNxYUdkbjBQR1JBSE1Ed1Ax?= =?utf-8?B?S3ZmN0Zad2RaSEZabk9yLzFLQjc2SVpndlFGc2tKbWZYYjc3T0R0VVEvdVBq?= =?utf-8?B?cEpLclpyUlRoU3I4U2lmWmpMWVAxaFZ0ZE5Cb25zeFBzUFpDeVNmb2xONStm?= =?utf-8?B?WkVkQ2txcmJzd08rajBMejVNMGZKdFI5WlBuZW52clpvMXY5TGNPdyt4T09Y?= =?utf-8?B?NGQ5RG1YSktuK3ZPNXNwS2d2U2RRaXFkb05YSCtZeUw0QjFDbWpTOGRhVzZI?= =?utf-8?B?bytVamc3Y2dZc3hvcVBGZWxLZUxtMytVYjBxeWpuR2FuUmF2K2JZdGg3RkJk?= =?utf-8?B?SkFBazAyalYxclYzaEFacWdmZUZBb1VCNEJKM05yVTE3M0RRaVpjK25yc05q?= =?utf-8?B?SnlEdGx2YjBwSkx2YTNlM2dTQnkwNlpnRk02UTZCbkJCZUQ2d24rdG5iRlgz?= =?utf-8?B?cTRhR2JrcGZyWHNFRW9JaUdCTmk3WldjVUxSK0FDVGh4L1dlOVU1NzdYRVFF?= =?utf-8?B?ejIxTUdhNE94bjVGSk1ESzBQWEloTWR5Zk42dGQvYTFNaFU3cUphNGZUajhR?= =?utf-8?B?NTZvVzNrQUkvbTd5MWl5WEd4NnRDd210bitjVEFMOVRnVmlqMnJZUEZzQURj?= =?utf-8?B?U3JCeWJwQ1hhS3JveW1wbFU1cVhOWEt0YUs2Um5qUzMwSlhqbGFKMW0wejhR?= =?utf-8?B?elAvdXJ1eit5ajBtVlBSWmZvQ3dRSStPTytNWmdlWUt1ajZBalR1dmVuTzA3?= =?utf-8?B?Wndnbngrb3dPeS9PMEVYR1FVR2h6UVViNnlFN0VLTFRKMEdmNXd1WjIzb1BR?= =?utf-8?B?cnNGZi9zT09Md0V6YzRHNWhoSUZsNzE4SzVPQWp5QjFIU1RsKzAzOVFhWFdG?= =?utf-8?B?QkNDV3lVSE5EUkQ1b2J2dVZ5ank2SHRUYjUwOGV6Yk1GZ3J1akpMWERIT2Ft?= =?utf-8?B?NTRibWlYTEovQW1MRDU1K3hTamRVa3kzbGtMdFAvczNuNXRJcGgzL3ZqL255?= =?utf-8?B?aWpQVW5qMzUrUjl4dEJTakk2MUhNY3MzZ0ZrSCtEbmJQb2pWcm1WU3Fyd1dI?= =?utf-8?B?cmFQQmN3Z0dIakNOTjAvV05KRDM5VEJsdUd4bzgvTTRWMnptVFl5Mzg0Ky9y?= =?utf-8?B?U1BwTHJVTVluU3MwVWJnc1p5cEhWTFdlYmtCd05DWnNtS3NHK1l1dFFjU2hO?= =?utf-8?B?b05qcGhacHlTWjZEYlVDbW50WEswM1RiMXl6WUkwdFlMemdSS0hJeW5tQTRa?= =?utf-8?B?bmFjT0ZWV001bW1WMllKb0l1cTdndmlhMUk2Z0tpMFdZazRCdk5VOXNpUXdI?= =?utf-8?B?cFdRcGtpUGxYTS9HRG9uZGtPYncxQnB0ZU8wY0JZYjgyRUFxR0FINFpDTVRI?= =?utf-8?B?YXpKUzZsTXd2RktzM1dXWlhkcmdTZ0poN3YzaCs1ZEhnSndoaVc5ZDJvbXZG?= =?utf-8?B?eUFuNTc2b0htUlJXYlB0a3NvZmhKbUJXekh2aW1BaGxad0tqRThiRFBtTXlW?= =?utf-8?B?K3VjVHVrT2RaMFJkaGxWTGRjbU5COFZlWGN4bEIxdlIwUFFZZHhDNGVoc0xt?= =?utf-8?B?eXNEMmh6aXdxZHMrK2pCTjc3N1d6c1RvazcrN0ErMFYycHFIZlZhSWJqck45?= =?utf-8?B?cWdLeGZGWUdHU2ZJbzhLQVdCYktrRk9VMnMzbVVGanhlQ3BDTDlZL1M1cXRQ?= =?utf-8?B?TU5nbVR3ME0raDQzK1BlVkErT2JTai9BdzFUSUcrYVF5aVM0WVUzMVZFOGNn?= =?utf-8?B?OVIxRGpBWTY0TEg0UkFPcFM2V1Fjajk5V2RPU1FVY3lKcnVYQ2VpVG9KZU9L?= =?utf-8?B?Tk05cTBDNFlpMEVuV3hVRkFMNnd6S0ZkWjdrbVF3R2lqV2p5TVZXRmo3clAr?= =?utf-8?B?SjVKd1hLN2ZxTk5sZkZLVFZPaDg2TEJYcFhCeTY2OHhrUitHc3p6QlExcjlE?= =?utf-8?B?dFhqMGN2cHNpV1VvcC9iM0czTVlrTVcwV3g1NjV3c0J5S0c2bXhYMFR3bk9M?= =?utf-8?B?cmI5QzVCYkVDeHViMkN1ZkhDdHN2Z2Fyd0VaOEpOclBlRk1HVUtjNEFQUlZF?= =?utf-8?B?NTc1UmFmczZvUENkeUZONkROaE1EUzR5Y3dYMnpYK1d0aXNmSXJwNTlxbTg3?= =?utf-8?B?dGd1MGQ4cjhsT1ZtQ0NBTVBOenkwcjljeTA5UVVYdFhkTVlMS1R4Q2ZCOGxL?= =?utf-8?B?UVpJTGptUmMzdzhEdHIxUmkwWU84M1Yxd0RDcVRxdkpWaTBXV0VxV2JpZnJP?= =?utf-8?B?QVdaMHJwNDlDS3V4RTI5RnJYd0lDam9zQ3pFWC9nL0luN2t3R2xxdEppVjgy?= =?utf-8?B?TVV6T2MzMWYrSVVQcmlsdzlMSmhyeDR1Z29rYnl2dVZWV0hsbWNETHhjMVFi?= =?utf-8?Q?nrsACg+F3vZAKtpY=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0290b01c-84ed-427f-e9be-08df239567b6 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:30.8400 (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: DpA34jSJ7r3dPVrbSUoibEUxMa8hrrLup2CAxH1rvFh3SSrUxwA/gPz4fDfjmlkv6kyTKXjtPYGmqtGHipqT3tVKBOWaeN/nrIBiMQwHxWw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5515 v5 -> v6: Substantial changes: * Drain each usb-host from a vm-state change handler when the VM stops for CPR (RUN_STATE_FINISH_MIGRATE), before the device and interrupt controller are snapshotted. A completion raised during the drain now lands in the still-live interrupt controller and is migrated, instead of being lost as it was when the drain ran from .pre_save() after the snapshot. * Deliver a cancelled transfer that moved some data as a short transfer instead of dropping it; a zero-progress one is suppressed for the target to replay from the start of the TD. A VM already paused when migration starts keeps a suppress-all drain in .pre_save() as a fallback. Minor changes (refactoring/cleanup): * Group the per-device CPR fields into one struct block; factor the drain-and-handoff tail into usb_host_cpr_quiesce(); fold the altsetting range check into the interface reclaim (one config descriptor read); register the exit notifier and vm-state handler only after the blocker, shrinking the realize error path. * Commit message and comment rewording, forward-declaration placement, and a checkpatch line-length fix. No functional change. v5: http://lore.virtuozzo.com/qemu/20260925-usb-host_v3-v5-0-e5b21724db4d@virtuozzo.com/ Signed-off-by: Andrey Drobyshev --- Andrey Drobyshev (12): 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 | 20 ++ hw/usb/host-libusb.c | 525 +++++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 542 insertions(+), 39 deletions(-) --- base-commit: f3c1d9ef263edfab8d2a273078493bb766dcf8f8 change-id: 20260914-usb-host_v3-bbfea86d1dad Best regards, -- Andrey Drobyshev