From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11021106.outbound.protection.outlook.com [52.101.65.106]) by lore.virtuozzo.com (Postfix) with ESMTPS id 3E24080674 for ; Fri, 25 Sep 2026 14:11:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=I5KtXekBtKRbt0LlLNtn3eAax9ym8wT4v8etWhc1DqLog8AWi9/6X7OUTlczpaP4yFZUirxunUJ62zUzYIZNZ0TO7Gobioo3Z/p8Kc1J5oT6zoBx9J02mRgDQg5bIx2SqfrpI6MUP1ZinGBRW8oxllgxuKZ9q7LIR2rS89eno4B8O3UaDT/st6qMicMAB1bzljDeMAFowu8yWf25HghwLzlcv36tTKunhJGgh3hDVXCuIesnJdCt2lb4w2nDWT2g7TVwzZpImJ86/kHbFGBztd/I5elIJHQZ4pUFgDc8XnEeKxNyHRBArg8rY1m62uDRS0Qz0iyz/P7eZ4h3xTbnHw== 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=MaAs9bbwKuvPL4pn6jmb7HSA3wRl43SpgbM5Hmk1csc=; b=e0jqOc3AzsvcZ46SPvxGhBtdUZB3t0sFF4iRR4Jp+L5EJyibT2+32oy9OIVPM3i743lSv0qibcpOd2e3OnenFR1cCfyLQ7SapYOeEXnHUxMXUW51H4PJXnp5PaaklpAgLUD83euAvEKNE5d4NzOUJYMqe2djWE5gKX4PvEOJ/Ys1UMW47dzI3K4L5wPgxr0XajLwejJvnGFNr1Fr1qaWVFdn74B3Ibq7MUPqFRZ50ouhFbto3SDhNvGT3k/OrsS/zScvrUeQo3KGwP/HmlCjYeaYtMn5FSsFRhOxiLs2I9MzpybFb7/OHZWwHaSFdvpGSOZ0be4iuDYav6KTXqDujg== 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=MaAs9bbwKuvPL4pn6jmb7HSA3wRl43SpgbM5Hmk1csc=; b=fdrYsYw05Fdw3HiPok2n4ikVNPD9P3f1AdEV0gcFJ5dwaiUFS92x5ExxPp/WeZUN7Wd/atsVxn7kkmMmLhSRERAgD7iK1OBubcI8VaOUcUY13H86e5+TgbjejCrrLyqQyfZjowaIIMbz+Zwnru9a7ctKWAolUYyhmVjgNk5umvl91AXHMzGlJP5lsOgjINGLu1ZvpJNXM34ZKYkDqRcdJU29uInle9bjnduHFVJEiWvKYyBXrxY3FRF5hBNWFJco9eNltu9B8sXkzOW5LHTB5nwqqGCOwexNx7UWsWQiSlnGERGI69+Zt9BrgpuG6zpC7DTX5KaZtoxirfPdTu2/Yg== 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 GVXPR08MB11398.eurprd08.prod.outlook.com (2603:10a6:150:2e5::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.451.18; Fri, 25 Sep 2026 14:11:29 +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.0451.014; Fri, 25 Sep 2026 14:11:29 +0000 From: Andrey Drobyshev Date: Fri, 25 Sep 2026 17:11:15 +0300 Subject: [PATCH QEMU HCI-8.0 v5 06/13] usb-host: drain before the host controller is migrated #VSTOR-137800 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260925-usb-host_v3-v5-6-e5b21724db4d@virtuozzo.com> References: <20260925-usb-host_v3-v5-0-e5b21724db4d@virtuozzo.com> In-Reply-To: <20260925-usb-host_v3-v5-0-e5b21724db4d@virtuozzo.com> To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR06CA0178.eurprd06.prod.outlook.com (2603:10a6:803:c8::35) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|GVXPR08MB11398:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f0301db-c59d-4918-bf28-08df1b0ee4ad 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|23010399003|366016|376014|52116014|1800799024|38350700014|5113699003|10067099003|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: w8jd4kaNNVhCrqW9xNMIUqQxoDTzA8SNBjU4bjqqXykc5JmoUFsufGZTYrOLWTQZVCE/cuStYPg/+TPAUh2h6vW0GQJQ6l6fpfuoSuSj3dgp3pq1emNMJzlW2xOOeRBwovF0fBD8UAZqzLtvpp0GOBLkM/Un0gDaDp+rWeuOe3zAu4jeLaJpSCn3j/Ttxg0z2l7pVV17YeOPiOPxMYkDU167uiJcuUCCbpWeP9MaUKIHumkqks2DjOgbiK2WlZMeVzAU8h48c1MZMrcYJX7nRZX+q1LL6HlKum5J6oncie6pvdSmuyAjElf+0ElwSiIl+kKvRQ0LA4H2z2+2Ei6lp6OymMZ7MgcoV7/l/pjXJOFQPjiTgJLn5nf1vWWbniq5yeOJGYOUj2VSgap8oscR6fIm0FTUGZO6mT2GKfUQN6rMw2adKi5yrAslhj0KfS+D6Xlm0l2vjpy7IW7CgGded3AZXpEaP35zwsHUSVcCBSUjKYW7z01rIcTohtstw3h/oSz71ZpbvrfON1uUEehCswVhBNiGIdQWMxLS60aIvFNMiIOJtxYGDj6TSiCxlbSgb1O12EnkPge8VFXNWpM2sKQUK8WAjYY8ri91bHsgjr6Kt+o802LrI+5wZRigkgOsBgo2hhmvM95hr79BhUrhqsLt5As1JRbIAKqS851Qm/+4f0sCWtHK4pOK4XYvEQ3466rTNDqhzfzlB34CtASKGMXx4p2kevyGgUnF250l1yY= 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)(366016)(376014)(52116014)(1800799024)(38350700014)(5113699003)(10067099003)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NHRoV0EzeWhmZUJzTHJNcTJ3bWwxbC9DREdnSUJSRSsya0lCQm5uSEJjbDYy?= =?utf-8?B?d3FYN0wzWTErYUxsTEtROSszZHNZeWNocVo4V3B6UTJoVGxOVWthYjdxc2k3?= =?utf-8?B?SjFEZHR0Wit6NnM2RDdaa2RqWDV1REhGMkpPWm5qMXZMaE1yTE1HbElmbmNw?= =?utf-8?B?a3hRWmZBVThtdzM3b0Z0LzErTWZPcXllYzZzL0tDcExVVDZ0NDVHWHRqV0FU?= =?utf-8?B?bWhLRisrYUFoL3Q2b1RnREFDYXc1Yk1yNk1VaDZ6c1JZWmgwaWpSaFIzdU1J?= =?utf-8?B?dlgvbitFb3laOHdXVnRWc1kxY09pOG9jYWVDbFpBV3hzeWFoVEF5aDFMNUFW?= =?utf-8?B?eXhEV3N4QjNxVFJDSmIrQjBFUXhqZFFmRHhUaGFvL1g4N1BhN25yOUcyMlAx?= =?utf-8?B?QXZlems3SFpRZlk1MUJ1amRYMjhpTFJLZ25kUGJ4UkJ3UzMzdENWRVBTVm5j?= =?utf-8?B?YnFnMDl4c0lGY2FPYUFuMW9UdkNNSFR2ZS9Edk1UeC9sL2k5MGdacG84Z1Jq?= =?utf-8?B?NXpMTkVBeVc4ZHdCdUZ4aEU4Sm56MUNuSXRCcmszN1VYQmhHclJacFlQbFp2?= =?utf-8?B?QWJySmY0Z2JTQS9NV3VQektaZm9OcjBGbHBWMnZrQTZtMFdreHBhYTBGMUpE?= =?utf-8?B?VFhSZ00wQUUxZWMxRUw1VFdZTDdRbytKN1AwVG16MHdaSUpsdnlTTityaHYw?= =?utf-8?B?VWk2VDBPTkMyU2ZDbUNrdTdPSjYzU3VOVUs3cmJwYi9GL2NUT005NG5EcEZq?= =?utf-8?B?QXYxUlZFOW9rUXZZSnRKdjRZK0FVM08wc2MxNnFMUXdNVGgxaXh1amxHR3BR?= =?utf-8?B?SUtQSGZRWng2UTArRU1ac3J3MFdBa2cvVHZyZThLL0NRVkh1YXNRZ2JrOEda?= =?utf-8?B?MXp2ME9XOFJmeE5vUDl4V2dhcWw2UTF0eGNkZ1AwNkdHUWJ6NlQzVHo2Z1ZM?= =?utf-8?B?c0JyeVhhNWprbWhGT0g0aUJKaDN3eGl2Q3h4UVA5czI3elpHTS9rQ1QxTzli?= =?utf-8?B?MlJnbkxiNTZtQW9pa3czeVN5bDZZeTVaeitLenZRL0djRDRyZ0Y3Q2lCak9r?= =?utf-8?B?aFBaaWMyRTR3VkpzbVk2NnR1ekJpZitJY2s3MnJtbnNuNDRSQ1NqeVZscmV5?= =?utf-8?B?TFhLdnRDa3pRUjFtN0EvMEh3TlJ6bVhMWmRva2M5WnJxYWF0OE5naVFlN3gv?= =?utf-8?B?ZDVEdkpZQU5GQkt1RHhRdkF4elk1N3BxZlEzV3NKRHhlNkpvTjlNQmNwZ2tp?= =?utf-8?B?OEFJQU1DNnEyeXBzNXdjVU1CUWVLQzZmaUd2cHl2U1B0NFBzdXN4QWg0U0xX?= =?utf-8?B?M2RpZ1liNnRRUlAySmJUMUNtbUlHWHJUSk5HUHNkdnhvMUllUXRDeE5Tc2E0?= =?utf-8?B?UjlSWUx3WUorTjc3SlJvMk1Gd2ZHWTZDendZdlo0NHRNdmhNZWxJcmdoaC9F?= =?utf-8?B?REJTd1E1ZFJnUnBqeU5MMFlkQnljcFNXT1hqYkUwS0ppQmNRd2RhSDk0RjJq?= =?utf-8?B?MXRuQkUrQnRSaWZ3OFZIUjdkODRxY0YzRDdhMStpNDZXYmFBQmZWWk4xM3Iv?= =?utf-8?B?VHNkZnhyQ3BLbWRiSVYxOU9SclFKcVJHdCs1MjF5SWFZajErMkhwQXBPZHhl?= =?utf-8?B?NW82dGNQWWsxVHhweDJBaldJYzlTb0FHbWRzVG9NV3R6OTRIT25QREJZNEl2?= =?utf-8?B?c0JoQ0d2ZHZKUWFuS2YyUU9abi9iVHpMMmFCd0xnR2xwdkptekJlT0UyZi84?= =?utf-8?B?Z0Z0a3FmcEhNSnIrN3VOdFZwdkYwbUhQcGNUNytFQmVVa3RScnFrUU5MbGNN?= =?utf-8?B?RHlzSXJSM3IwQlB6U1FOdGpsUGFjVGFRc1FscU5SQVlNb3ZsMTVlam1VNUMx?= =?utf-8?B?RkdkWEUyM0FXR0l2LzJiL2FvSTRleXlCM05CSjVkV25mdE1kUkt2RWxmdmpy?= =?utf-8?B?VlBjV2pzZDZ0THYwbTIwbjBnUDNRbGJrenllZEt1Wmp6SGxoc29hV0NMN3M3?= =?utf-8?B?K2lsd3IxeE5BZmdNcUtXTmZWMk9pU3AyOFcxRTdPVE1Yb3BEQTBjTy9jYStB?= =?utf-8?B?SHRQK2JGRFBIbVNTcDUxUXlQNE52RS9hK0Z1cGdXbnk2QVpuZDM1ZlE2QkFy?= =?utf-8?B?aDBLeE1wWEpIZE5oZmhMc3hSTnNUbDFHOTRYcjZqSnNoN0hGUTl2REJrM1ZQ?= =?utf-8?B?M1U5d2ttU2NvOCtrejNtWGZTcnlTSElEZVF4UE1menZuYng3c0xqZ01Gc2U5?= =?utf-8?B?RlpaUDhVQXAzTHpFZlBkbnVQOW1Ua1lKRzVvQlg3QkErbWl0SjdNUUJNSWZB?= =?utf-8?B?aVNwVHlRVklid0srQ3RydGUwaDhvNVZUYUxINWpoNjZYM1AyUVc1VDNwVDlm?= =?utf-8?Q?nBwfy9Bpd4OIzrgE=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f0301db-c59d-4918-bf28-08df1b0ee4ad X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Sep 2026 14:11:29.1281 (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: OGFgYYrwkDKFgkWANPzG4zjDVDAwc2BPvZKMBAkal7C5nyWtTkT+iLqcNSFjSXuKz8pS7ovDemkNRJ4jCpVxMjNqB6i5dCkns5PqgOgjekE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR08MB11398 .pre_save() drains the device's URBs, but at the default section priority the xHCI controller is saved before any usb-host device -> its state is already on the wire when the drain runs. All usb-host devices share one libusb context, so draining one reaps another's completed transfers too. Each completion pokes xHCI (writes an event, queues the next TD) after xHCI has been saved, and the target then resumes from a stale controller: OUT data sent twice, IN data lost. Raise usb-host above MIG_PRI_DEFAULT so every device drains before its host controller is saved. Sections are matched by name, so the reordered stream stays compatible. Signed-off-by: Andrey Drobyshev --- hw/usb/host-libusb.c | 1 + include/migration/vmstate.h | 1 + 2 files changed, 2 insertions(+) diff --git a/hw/usb/host-libusb.c b/hw/usb/host-libusb.c index ebad04ec305..9e9ee7d305f 100644 --- a/hw/usb/host-libusb.c +++ b/hw/usb/host-libusb.c @@ -1922,6 +1922,7 @@ static const VMStateDescription vmstate_usb_host = { .name = "usb-host", .version_id = 1, .minimum_version_id = 1, + .priority = MIG_PRI_USB_HOST, .pre_save = usb_host_pre_save, .post_load = usb_host_post_load, .fields = (const VMStateField[]) { diff --git a/include/migration/vmstate.h b/include/migration/vmstate.h index 6839117be87..3358d7fedc8 100644 --- a/include/migration/vmstate.h +++ b/include/migration/vmstate.h @@ -160,6 +160,7 @@ typedef enum { MIG_PRI_LOW, /* Must happen after default */ MIG_PRI_DEFAULT, + MIG_PRI_USB_HOST, /* Must be saved before the host controller */ MIG_PRI_IOMMU, /* Must happen before PCI devices */ MIG_PRI_PCI_BUS, /* Must happen before IOMMU */ MIG_PRI_VIRTIO_MEM, /* Must happen before IOMMU */ -- 2.47.1