From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11020108.outbound.protection.outlook.com [52.101.69.108]) by lore.virtuozzo.com (Postfix) with ESMTPS id 35C288015B for ; Mon, 14 Sep 2026 19:13:25 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LmHZqkKwMys61PcNrn3RIR+AkRCkytw1P8NdvJqaqVERYVm6evPBlWLX+D+UMYIPdKtO86iC/sksP0R4VL3ZGYXQ9H6dC99gfVHLLwx+G8y0rFByCj/iQk2B1sXSy0qW52ooclLTuc5kkninVfBYDs5wWBbZaW7cND+J/L4GQ8J8ZxH04Tmt8gkW28OX2umw4sGaaOpoE3b/6sfOYeicfuPykCltKYDqyCh/VWk21rbL5bc3gjQzdUyptRY3NPh5LGwwkb8Y/bLqFjRFaj1KtidCbx+pRKfAup6rB6gxdyPhJM1gjCJxd4lpMse9s1+n+9Fpv1Bia6sZ4jDAkX6B8A== 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=2SGMXO33If9ePYI94OvrsZVdHWg8gEHSN3qW9Df1xXE=; b=jtD6kUZtDURxO5Y84ZcDYvsfJZdvlD7f4MBvs0ekLeuzKSYDT/ji6uim1OYyjUAw7EOJNwoOwuW4+pJRW4acydesreeBXGEns+b/0UdAWLa4vzjlPX8zxv/2IwSQxmbxOqHNjGbEnXNlhFku6UkQJ9abxUWl0ljjW18Zg7ezH/uPnjw6pxFl646TpdDl9+pX4uaDjhxTYP1v6NoUp1N63+lPSzDnwXCSX8Kjmt9umpfbJMf8lYk2Yba0Q0J2Sn/XK3ayb7zkVRYrKyFKHh2p0V0vuToFT/mAZuHyD3X3AePTJFllS/GL71ltdEVW3qSqqWzDXcRR8DMaNRAZfzjC1g== 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=2SGMXO33If9ePYI94OvrsZVdHWg8gEHSN3qW9Df1xXE=; b=c7iDa0rStWrhhtkHyfFy1gomA6fFrDiQkT1sbNEOcHb1745/IN0gxeORRMLbhb0AAYvlLKovjbw0l/XbCfYsgPqcnVMKVMLMjGEkvqA5UpblwelZV24wp8DMqMgLDjzU/SWFp2JOLjepFZYYbBTFDhgG0034qlh9fRFNlmubuwOxcpu3vnPYupR3jqe2a4hHGdWEwNQW7Mr20FQr48XMt29RcKed27Vi8IZ4M3pUe0D3vj1O82Sff4y9tqPL43PoR2YOsn+PyLnSyE//FmQvB0vnRqrusJe8IP4Fgb49kqjjLxbCM910BL2tvEK1ej8bR3fC9Z5XfB6vNLWylpk8vg== Authentication-Results: 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 PA4PR08MB6192.eurprd08.prod.outlook.com (2603:10a6:102:ea::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.428.8; Mon, 14 Sep 2026 19:13:23 +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.0428.004; Mon, 14 Sep 2026 19:13:23 +0000 From: Andrey Drobyshev Date: Mon, 14 Sep 2026 22:13:17 +0300 Subject: [PATCH QEMU HCI-8.0 v3 09/12] usb: migrate the interface altsetting #VSTOR-137800 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260914-usb-host_v3-v3-9-c43a834ce016@virtuozzo.com> References: <20260914-usb-host_v3-v3-0-c43a834ce016@virtuozzo.com> In-Reply-To: <20260914-usb-host_v3-v3-0-c43a834ce016@virtuozzo.com> To: svt-core@virtuozzo.com Cc: den@openvz.org, andrey.drobyshev@virtuozzo.com X-Mailer: b4 0.16.0 X-ClientProxiedBy: VIUP296CA0097.AUTP296.PROD.OUTLOOK.COM (2603:10a6:800:35c::17) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|PA4PR08MB6192:EE_ X-MS-Office365-Filtering-Correlation-Id: 27dce149-bfd2-4541-5e3b-08df12943eef 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|23010399003|1800799024|52116014|366016|376014|18002099003|10067099003|5113699003|6133799003|22082099003|56012099006|38350700014; X-Microsoft-Antispam-Message-Info: R4SU4j2mlrwXtc6B5dV5+4x8Mbv342ya3OxbdJRGyxd7s8SIGyim86mXvN5Jr3gogaYgrFHNuIivHANdjIA9+5MN7FYFLFEL870pbKGtLHuJdZYDsj0EqnuJ7hQ/sjsuXUN+g46w51MkCNndVEjLNzdzbxnzcfWIRob2pY3frfNkD312pWQI39ynf7ziXs3LaVxm/ygMTn8dlA1AgAZ7zcIMTSboKWqkhT5Hotckh0suOFwOuTmPpk4k+ncJ2yrubJoGxwxyT0tVTHnYl/X7sO2X4JJpnUVebXSDgbfSGi73SKyhpXZxwGoPo9Wexo6UyRqIBLvAxxX28DV5QuoE6csQeDXItutV4Bfmd/Svma6MQPqbQdmqpDs2Kev28jwP4pN0jgEr27Zxws7WfcUgN+RMdKIHjZrm9NifNNTcDA3t7qEXUtUW071Uf23PFd5wiMBbZmnTb2IBm6jC0+F5jNmIxDSWpnXud9uswer2MUcwLfry+wjlUWl2WE4wvVqvI40fYF+ylVSJOCc5Oc8rj8FCTylILpNNu42pyX0vql/7ww2AScS59oEe9kv0resaMouzw0oBGjTsdjk0CSlg9H0IuFHOtFzT124UmGORcEDJnlAv9e8WUDJAsx+k6t6e9jG26wtQGNpf2i09ybvulmAWpMBb2Jhe9tb264VzBYi79nnRldRWwwTI7ociRQ1duH+fJ9l9/PMVePONfOLMKgDMJ2Y4Mig47znuh+ThbZo= 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)(23010399003)(1800799024)(52116014)(366016)(376014)(18002099003)(10067099003)(5113699003)(6133799003)(22082099003)(56012099006)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZG1FcUFZbjFqN1lITGZmM1daMVgxVndLRWc2WWlPd0JKblBUaFg3SWdWZjU3?= =?utf-8?B?YlZCL1FuVktkUitvMnM5STQyek8rZjdLZjVvTEVxOS9wN3VpUWo4QllBMEs5?= =?utf-8?B?enh0TFRzZE1pSnVDRjBDL2RjYm9NMGl4RU81L2tIOUNlOW9hY01PT2VxMmI5?= =?utf-8?B?Tm9NbVdML1dreUZnMWYrV0hiMVRWYlZNUjlUVWNUblp5Vmc4VmVrUFhqM3JJ?= =?utf-8?B?d2JYUDd5dlBHSXJiMjNXdHJKUVJKUVdLb1czM1VzUGljUnp1Y1ptOExhc3lx?= =?utf-8?B?K2tJRWdHUC9TdkUzMmtjejBudU1jdEFSUHdLWSt6RDFibzBZWmg1OFZvcVdn?= =?utf-8?B?cHpQUDdVZmNreVBiOHZoeTVmKzR5bk84SUh3cmNwSmprV1NJZHdWeEpWRDRZ?= =?utf-8?B?NG1kMUZHWHpqSnF2aFdKTjVibXBxWVMva2hmbGt2aGdBQ3Yva0tlck9WSE5l?= =?utf-8?B?VHhHUlhFZTQxcUZobVMyaW82N2c2MGQ4cVVRSmFrMEgwZXkwN0c0Z1dDdUpa?= =?utf-8?B?b3c4cWd2cm1qcU1yODR4R1NZNlIvcEhjM0ZPR3ZVYnVleTh3bVlQZmxVR2RF?= =?utf-8?B?azUvVUJQLzhxSXhyTzJWZHJzV2ZBbWhmRENlcVlkNkNtcXg1VFgvNzV3b3F4?= =?utf-8?B?bXVTTCt1WURrRURRaTQrZVMrWXpxOVFWNzhxRzVraXBob1l0bWNrR2JTUmZy?= =?utf-8?B?UVNvdjhoWE5pemh3anZFWTlGaTByY1gwbWxDNks4TWg3MTZyZXNMQVAxTGY3?= =?utf-8?B?VXMyd085dVBUR3Z1MmI3TlNxWUdFQXY3bzM4RXNIV0tsU3NINVhjQzB4b1ha?= =?utf-8?B?YlZXczQvSGJuUmRScjkwQzJwU0ZKUFdRSENtRlpUSEpQNVVHcEN1VVczcDE0?= =?utf-8?B?QzV4MU1DM1MxeWdMb1c1Tm1ZdGUvamx2NXZuaERKS2NKK3J0clZGSGN4THBV?= =?utf-8?B?UUQzeE5zc25PeDFFNjgrUTRvbHdVMlAzemR4Sjc0QzFzZmtmanp4ZnFCR3pW?= =?utf-8?B?bHRSSytYa2Y5STRvbDFuYkZIN1FUSnN1ZlEvOEFCOGxQb0g4SlNTRlhwdDB1?= =?utf-8?B?OXI1QmFqZkhiVEtkNmJSL3pjbWxzQ0ZrZVN4cUkvQ3ZEUi9JOVdVdi9DTjU3?= =?utf-8?B?a2xnbFdQd2Vzb1hVSkwzaWY5aGxTcTV4QmdRWXh3ZE8ycXBDUUFjempJTDBu?= =?utf-8?B?WmttbTZzK0V3ZnZiUWR5S0oyQ1pMRkJCM3dkVTdFMlNtcGVaQS9YZTROdnpv?= =?utf-8?B?L24yczFlTnRyaFdQSlpRTjNCT244K0Eya3RRbVVYcFhRc09oMTZJQkJUL2l2?= =?utf-8?B?U243OXlvNVhnbGJUeE45bXZFeWM0cjZCVDdSaERFbWl5Z21US0JmbU1weU94?= =?utf-8?B?dUY3Nk1aQlhHa205ODlUUzVMODZCVy9sZ1FIK0NIRDJTaFhDQ016cHd0cFV1?= =?utf-8?B?OEZmc2x4VHprb2R0VDJiYzBzdWR6RnpBY092Ynk3aUVWdG1oS21xblVMMDhn?= =?utf-8?B?Q0JiWmR4dW1iZGZZd3lNK3RRT2Mxa0V6Y0ZYYWRMbzZEMFNGbkY3aGNtVWw5?= =?utf-8?B?alE5T3k4S3ZJcUJxc3VQeVcrZUYwYXNMYVVyc2pDNWpYcElySGd0UDQySFNL?= =?utf-8?B?MlBiV255alVvd1BqQXd4Q1l3Z00xWjdMTXl1OHkwaThYaFVoWUwzamp3NHdN?= =?utf-8?B?NWVMNDRIUXR3SXUvWStpMGtiN0czdGhLSmdPUGFzZ21KNXBReEU5OW5jcnJG?= =?utf-8?B?OHZrcFFFdkRvY0RmeVFjVWNZWTl2VDJHVU9EemRZTUl6cGg1ZWlsd2JGZHZ4?= =?utf-8?B?UWVkYjBuRm1yTmwvdU4vTmxrWmRadis2bCtvU0dkTG5rSy9YQk9hWFRja2ha?= =?utf-8?B?TlF0RWlPNyt1TC9vRDY3WGx6Y2s3LzhmcVVXY0RCSkdyNldNckYwVGRkeHV6?= =?utf-8?B?cFMybUEwNmpsWCtGYVc1T3VxdWJLSnVMZVBHSW5UNlNMZEI1b1dNeXFwVW1X?= =?utf-8?B?M3BFQVZGcEhVU0x3QnN6NEMxM09JdWU4c1dhU2piU28vc2kyUGUvSVhXZlNC?= =?utf-8?B?c2tRMFkzYmxlK1hsM1JkSlc4cjZUeVcwYlU2NmNsSjM0TmdoSlpETy95NnhP?= =?utf-8?B?SmczREZVUGtZSzU2azh3RzluNTBiTDYxYVc3aVdHcGo2clp0aDFpNld3U1kv?= =?utf-8?B?WTJTUWFGbjJIeEJBbnZMTmRCeHdTVE8wR2VSK0ZMeUtRR2wyeWsrMUV6OWVE?= =?utf-8?B?N0JlRjZEQ3RRU0NrMW92UCsxSitHUm0rQ0w5a1B4eUNEbXVsbENLRGlENWpQ?= =?utf-8?B?MDI3TXplRklueGVJL2ZFWmg3djg5d0FGOW50eWVacGcwSDJMaU5aTlpiSlFV?= =?utf-8?Q?QR4JMZBpXAoPDMpw=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 27dce149-bfd2-4541-5e3b-08df12943eef X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Sep 2026 19:13:23.2412 (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: wxamQJpy+pjcR2CwHUfhHlJP8e4XPFuE0l3fR/7nWwXIq2UkHAsYlD+TdogyZL2weYrm97sdhXaCPmGRv61V2C7xMMFs74mUQDDjgreEe+o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6192 The active altsetting of each interface is host controller state that the guest selected with SET_INTERFACE, but it isn't part of the migration stream. For most devices the target happens to reopen on the same altsettings, so this went unnoticed. It matters for CPR of a device whose endpoints only exist on a non-zero altsetting, such as an isochronous streaming interface. Migrate the altsetting array in a subsection, gated to the CPR modes: only the CPR target consumes it to rebuild its endpoints, while a regular migration reopens the device and reconstructs the altsetting itself. Signed-off-by: Andrey Drobyshev --- hw/usb/bus.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/hw/usb/bus.c b/hw/usb/bus.c index 8dd2ce415eb..ee13acea658 100644 --- a/hw/usb/bus.c +++ b/hw/usb/bus.c @@ -8,6 +8,7 @@ #include "qemu/module.h" #include "system/system.h" #include "migration/vmstate.h" +#include "migration/cpr.h" #include "monitor/monitor.h" #include "trace.h" #include "qemu/cutils.h" @@ -63,6 +64,37 @@ static int usb_device_post_load(void *opaque, int version_id) return 0; } +static bool usb_altsetting_needed(void *opaque) +{ + USBDevice *dev = opaque; + int i; + + /* + * Only the CPR target consumes this, to rebuild its endpoints; other + * migrations reopen the device and reconstruct the altsetting. + */ + if (!cpr_incoming_needed(NULL)) { + return false; + } + for (i = 0; i < USB_MAX_INTERFACES; i++) { + if (dev->altsetting[i]) { + return true; + } + } + return false; +} + +static const VMStateDescription vmstate_usb_device_altsetting = { + .name = "USBDevice/altsetting", + .version_id = 1, + .minimum_version_id = 1, + .needed = usb_altsetting_needed, + .fields = (const VMStateField[]) { + VMSTATE_INT32_ARRAY(altsetting, USBDevice, USB_MAX_INTERFACES), + VMSTATE_END_OF_LIST(), + } +}; + const VMStateDescription vmstate_usb_device = { .name = "USBDevice", .version_id = 1, @@ -77,6 +109,10 @@ const VMStateDescription vmstate_usb_device = { VMSTATE_INT32(setup_index, USBDevice), VMSTATE_UINT8_ARRAY(setup_buf, USBDevice, 8), VMSTATE_END_OF_LIST(), + }, + .subsections = (const VMStateDescription * const []) { + &vmstate_usb_device_altsetting, + NULL } }; -- 2.47.1