From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0DE1D470AE for ; Sun, 21 Dec 2025 16:03:04 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 079744025F; Sun, 21 Dec 2025 16:03:04 +0100 (CET) Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010000.outbound.protection.outlook.com [52.101.201.0]) by mails.dpdk.org (Postfix) with ESMTP id 242EA40615 for ; Sun, 21 Dec 2025 16:03:02 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MEbTubRyykJ5baqF100wqr0tiRwWKL88zkUEOkSrqI+1kj1lyIlXC7H14pE+lowyO1iQ3N23N0MQ1eiJiLvMjdOoSq36SlVcZuEld5YYML4nKYMiiWxEmXOh9Nj3nqkJDqMLctZqHEN50a8QldDkNojkZUY207ZxKDkgOK9ydHGlF6H6upSeaxAOhQJgksfWwtS6HapupJCkD7RzNMOEkYZ0PI6O2Ol/ofXH19aJvj5wHVsMIUElGfglfHwW4BKRm5Se5/KP6Q+RADyqon5ujUPNIu8dQ4S++GJG+oRfoKfMg+zYo6DKQqt93peFqGg4aZxP9l6S2kd0eJrwMfHNNw== 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=S7LcEegX6eIDNaUT5SE+XLDYgjeb4WxXS6vco7UExJI=; b=q0GvWJRbUKzIeio+fg4zVd5o84v+jsJl7sNloevZ5cf+skuUvtZshVWPSaG7ClDbUtqH9V/YI22weT77B4a10teOBg6ZpeLd5R5AqrXWW4M2dKkPUCArOOz0cEL2n487sLona1Hd6lopgQUsF2cOPL6NKMSqBOSKm+SsvjHtQVefB9yKWU0aLEuNXY+dAMpI6fbVbZL7/RDlpEx27ZbdGVygSk1dmk3bvqNiQVR+0yaFqtn0ncuFK1ifOOk41efpjw7YxcdhxkPJNCP82c9kyTq6oGCROrqfz1rLBLcSQuHmobbwW7qWE4o2qms6CsplNoiZJy4ayHyTt+tr7fEwig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=redhat.com smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S7LcEegX6eIDNaUT5SE+XLDYgjeb4WxXS6vco7UExJI=; b=Uy2ftikUYMhOFmfU0/YI7BZBAl4hxOGp2ctf6ACo4tdqQwUVQ0iIZzX5iN7XT03cGAtrDpyS34rYztE0Avknii4NYqRNcVP8DnwacPWvh2Sj0L8JP7EvUtWf/c7wQ0Z9N9UdJO3iVJj32zLSnFVHQbPyl4JhuKAcieGVbpIbCYDdaMCwgfEUVuuH/2mvSBzEmqsIyj+1eMW7N7x37I0VoFsLiNDQC6y6Ks9pCf8XEoD6LaHbevc6qjKB4TcyZ7BhhZX3uEhgh1fcj8TVpbXBD5H1qVFVQXkjyGHsXcl0rBbDZIwxJZiSFq7atPeJi2FIK7hsbhIpmnL1B2xg8UwHww== Received: from SJ0PR13CA0031.namprd13.prod.outlook.com (2603:10b6:a03:2c2::6) by DM4PR12MB5793.namprd12.prod.outlook.com (2603:10b6:8:60::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Sun, 21 Dec 2025 15:02:58 +0000 Received: from CO1PEPF000066EA.namprd05.prod.outlook.com (2603:10b6:a03:2c2:cafe::9d) by SJ0PR13CA0031.outlook.office365.com (2603:10b6:a03:2c2::6) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9456.8 via Frontend Transport; Sun, 21 Dec 2025 15:02:48 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by CO1PEPF000066EA.mail.protection.outlook.com (10.167.249.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9456.9 via Frontend Transport; Sun, 21 Dec 2025 15:02:57 +0000 Received: from rnnvmail204.nvidia.com (10.129.68.6) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 21 Dec 2025 07:02:41 -0800 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail204.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Sun, 21 Dec 2025 07:02:41 -0800 Received: from nvidia.com (10.127.8.12) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Sun, 21 Dec 2025 07:02:40 -0800 From: Shani Peretz To: Maxime Coquelin CC: David Marchand , dpdk stable Subject: patch 'vhost: add VDUSE virtqueue ready state polling workaround' has been queued to stable release 23.11.6 Date: Sun, 21 Dec 2025 16:56:46 +0200 Message-ID: <20251221145746.763179-58-shperetz@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251221145746.763179-1-shperetz@nvidia.com> References: <20251221145746.763179-1-shperetz@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000066EA:EE_|DM4PR12MB5793:EE_ X-MS-Office365-Filtering-Correlation-Id: aa8f4aa9-da86-4853-9058-08de40a206cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|1800799024|376014|82310400026|7053199007|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kF+eV6CWHa4TIsgZwNDaHNlOXMd8nNMhXf1m1UEEECF552N9KHgzlY33QMgx?= =?us-ascii?Q?kICDnQUy7sexF3nznxmRHFzgfbPiauA+c1eXASXqCboaH3/PrPx7cIbfGx3j?= =?us-ascii?Q?nOzuaAU9IY8/sjLybx1mnQvOTjRpiyK5CT7rlrEtwd9sCvb4UOjQcNJux542?= =?us-ascii?Q?9yhgcYYkKvfWX3ZMff6sbuAjFeqc0tH/HSxz1elc4diklTdCeGFfjLhUk9NY?= =?us-ascii?Q?OQQCSn/5shD0l3bhFWKyiFJaa/Gse5uPNXWQHeKYeegLkpmvonSSjE15H5nr?= =?us-ascii?Q?P2bTTYDMRXcE4vr1VHJ9y8f8+eTteSyIuFYCbCJszHHigk1DNnjQGn9hKsSt?= =?us-ascii?Q?ENkHYP/plFzq8K0LGFzz6fZsg1dC1Y5S8oZygSIdh6gOUUfwPjQPDhGyNxcq?= =?us-ascii?Q?4tmXWPzmV1PRpZsk+bLwAW9BSskcLr0y7H8CVCeSbCk1UXI3dKFFnRGeneNx?= =?us-ascii?Q?K1f7FVNo5GBdcj9LTK3CSX7J6zo95GvrVmIA339fJqOlT98UY6jOMmN+jkpE?= =?us-ascii?Q?e2FzFwAWgh32VbfAhT4NaXFDPMAYwXp1/LfMPtUC/eY1FcHMlPZQYkVLko6r?= =?us-ascii?Q?uvbkQtoouMhjQAqxcMA4iuIy+ZSPdyxF1Q0zWNB/4borLMLwC8FEnY90B95F?= =?us-ascii?Q?Hq07XgETbPvel7zFIovfWkLdpkEKvD/XUJZFgT3BXimSiyfcd6XZpp1m85jZ?= =?us-ascii?Q?6eZAaQpQzjGGC0F3n1cs0Ybfs1BSM4z/Bhj+kiUUpz9gYeTExmRZhyX7Aqa3?= =?us-ascii?Q?4WDr9sFIUpsZdqHQj2AaG9xc4fuVNf5IL3UOtdCyrefxP0rSfJ7da5aYLtf9?= =?us-ascii?Q?1Ts/HYIkrge5GdnW/lqcKOwjakaBWANh/Eal+3njQGDcUB/xtQjp+ofm7URJ?= =?us-ascii?Q?wJmvAeVAWGO43CrssQGdypkDbYVYPq22VChknpw4i0WHXKvyGJRV1VaN6YK7?= =?us-ascii?Q?DJDAZ3zVW/hOLrDab0ffQ/+V/tevoU0NgOlEWplQX7CcNkQ37tcHoUQKc55y?= =?us-ascii?Q?AKoPosJ8DYhq+YvxwCteqe+MouPnnYqiY85k5WVxj6AfhwZDqDqomZmTznBy?= =?us-ascii?Q?PhfZSl2QZOpv2aW6b1zSXBMgfxV4Hb6DHBN5/xBL63E0mSp2pwdxFztl5Tsx?= =?us-ascii?Q?AalOyK10Mo0dyFwY+hvfprQ3A+M/wJkq7Re1YvXCx4SvvXfhp39KLjjclItG?= =?us-ascii?Q?LjoLMJVcTg4HOtckUosP99a7aUd7DoIvNAEYopvO3pJan1+tLx8gbrXU33Tl?= =?us-ascii?Q?k/bGW2y0t/znyJ0jJRw5bDbz3htTC8BiJ1F8den8cNPL5wFXONRBhRX/4UK8?= =?us-ascii?Q?z/PAJ/dIPNpkXIXf4Th0gjz1rynHXZDvM+eR0U+7aCU4lmpwBX2by1uEszBT?= =?us-ascii?Q?AMtWxJkwyZbPJ1hN0NDoAqbN8bVY010YJDlDzjJRereCWBRsM26TKSI6u8Rf?= =?us-ascii?Q?+7w/FZSHrYiXYVK5K9tcrttxU/rq126E5rv/gxFVr0YMRz6CVCYZlCKuEsDd?= =?us-ascii?Q?cuqd37II2matYGBiQPL187PvMz1wRusLZsGI0twj0r16X2xSkFePYIgvVQW8?= =?us-ascii?Q?61EyVsND5VF/MIC6o0ucmJ0+Xqk7u4J4CGL81fsP?= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(1800799024)(376014)(82310400026)(7053199007)(13003099007); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Dec 2025 15:02:57.5379 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: aa8f4aa9-da86-4853-9058-08de40a206cf X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1PEPF000066EA.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5793 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 23.11.6 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 12/26/25. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/shanipr/dpdk-stable This queued commit can be viewed at: https://github.com/shanipr/dpdk-stable/commit/0deaa8dd208d0afda5941aefe1cd76ab7f8ef0fc Thanks. Shani --- >From 0deaa8dd208d0afda5941aefe1cd76ab7f8ef0fc Mon Sep 17 00:00:00 2001 From: Maxime Coquelin Date: Tue, 16 Sep 2025 11:35:49 +0200 Subject: [PATCH] vhost: add VDUSE virtqueue ready state polling workaround [ upstream commit 84350b1f470558836b61ff1347f660e06c81cbf5 ] Add workaround to poll virtqueue ready states before starting device when VIRTIO_DEVICE_STATUS_DRIVER_OK is set in vduse_events_handler(). For each virtqueue, poll using VDUSE_VQ_GET_INFO ioctl to check vq_info->ready state with configurable retry limit. This addresses timing issues where device start was attempted before all virtqueues were properly initialized and ready. A notification mechanism will be introduced in the next version of the VDUSE uAPI. When it lands, we would only apply this workaround when the kernel does not support it. Fixes: a9120db8b98b ("vhost: add VDUSE device startup") Reviewed-by: David Marchand Signed-off-by: Maxime Coquelin --- lib/vhost/vduse.c | 61 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/lib/vhost/vduse.c b/lib/vhost/vduse.c index 3b1a3b008e..d0bd2a537d 100644 --- a/lib/vhost/vduse.c +++ b/lib/vhost/vduse.c @@ -279,6 +279,55 @@ vduse_vring_cleanup(struct virtio_net *dev, unsigned int index) vq->last_avail_idx = 0; } +/* + * Tests show that virtqueues get ready at the first retry at worst, + * but let's be on the safe side and allow more retries. + */ +#define VDUSE_VQ_READY_POLL_MAX_RETRIES 100 + +static int +vduse_wait_for_virtqueues_ready(struct virtio_net *dev) +{ + unsigned int i; + int ret; + + for (i = 0; i < dev->nr_vring; i++) { + int retry_count = 0; + + while (retry_count < VDUSE_VQ_READY_POLL_MAX_RETRIES) { + struct vduse_vq_info vq_info = { 0 }; + + vq_info.index = i; + ret = ioctl(dev->vduse_dev_fd, VDUSE_VQ_GET_INFO, &vq_info); + if (ret) { + VHOST_LOG_CONFIG(dev->ifname, ERR, + "Failed to get VQ %u info while polling ready state: %s", + i, strerror(errno)); + return -1; + } + + if (vq_info.ready) { + VHOST_LOG_CONFIG(dev->ifname, DEBUG, + "VQ %u is ready after %u retries", i, retry_count); + break; + } + + retry_count++; + usleep(1000); + } + + if (retry_count >= VDUSE_VQ_READY_POLL_MAX_RETRIES) { + VHOST_LOG_CONFIG(dev->ifname, ERR, + "VQ %u ready state polling timeout after %u retries", + i, VDUSE_VQ_READY_POLL_MAX_RETRIES); + return -1; + } + } + + VHOST_LOG_CONFIG(dev->ifname, INFO, "All virtqueues are ready after polling"); + return 0; +} + static void vduse_device_start(struct virtio_net *dev) { @@ -411,10 +460,18 @@ vduse_events_handler(int fd, void *arg, int *remove __rte_unused) } if ((old_status ^ dev->status) & VIRTIO_DEVICE_STATUS_DRIVER_OK) { - if (dev->status & VIRTIO_DEVICE_STATUS_DRIVER_OK) + if (dev->status & VIRTIO_DEVICE_STATUS_DRIVER_OK) { + /* Poll virtqueues ready states before starting device */ + ret = vduse_wait_for_virtqueues_ready(dev); + if (ret < 0) { + VHOST_LOG_CONFIG(dev->ifname, ERR, + "Failed to wait for virtqueues ready, aborting device start"); + return; + } vduse_device_start(dev); - else + } else { vduse_device_stop(dev); + } } VHOST_LOG_CONFIG(dev->ifname, INFO, "Request %s (%u) handled successfully\n", -- 2.43.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-12-21 16:54:20.174396818 +0200 +++ 0058-vhost-add-VDUSE-virtqueue-ready-state-polling-workar.patch 2025-12-21 16:54:17.148081000 +0200 @@ -1 +1 @@ -From 84350b1f470558836b61ff1347f660e06c81cbf5 Mon Sep 17 00:00:00 2001 +From 0deaa8dd208d0afda5941aefe1cd76ab7f8ef0fc Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 84350b1f470558836b61ff1347f660e06c81cbf5 ] + @@ -19 +20,0 @@ -Cc: stable@dpdk.org @@ -28 +29 @@ -index 2015ae9f21..70fe472624 100644 +index 3b1a3b008e..d0bd2a537d 100644 @@ -31 +32 @@ -@@ -272,6 +272,55 @@ vduse_vring_cleanup(struct virtio_net *dev, unsigned int index) +@@ -279,6 +279,55 @@ vduse_vring_cleanup(struct virtio_net *dev, unsigned int index) @@ -56 +57 @@ -+ VHOST_CONFIG_LOG(dev->ifname, ERR, ++ VHOST_LOG_CONFIG(dev->ifname, ERR, @@ -63 +64 @@ -+ VHOST_CONFIG_LOG(dev->ifname, DEBUG, ++ VHOST_LOG_CONFIG(dev->ifname, DEBUG, @@ -73 +74 @@ -+ VHOST_CONFIG_LOG(dev->ifname, ERR, ++ VHOST_LOG_CONFIG(dev->ifname, ERR, @@ -80 +81 @@ -+ VHOST_CONFIG_LOG(dev->ifname, INFO, "All virtqueues are ready after polling"); ++ VHOST_LOG_CONFIG(dev->ifname, INFO, "All virtqueues are ready after polling"); @@ -85 +86 @@ - vduse_device_start(struct virtio_net *dev, bool reconnect) + vduse_device_start(struct virtio_net *dev) @@ -87 +88 @@ -@@ -414,10 +463,18 @@ vduse_events_handler(int fd, void *arg, int *close __rte_unused) +@@ -411,10 +460,18 @@ vduse_events_handler(int fd, void *arg, int *remove __rte_unused) @@ -96 +97 @@ -+ VHOST_CONFIG_LOG(dev->ifname, ERR, ++ VHOST_LOG_CONFIG(dev->ifname, ERR, @@ -100 +101 @@ - vduse_device_start(dev, false); + vduse_device_start(dev); @@ -107 +108 @@ - VHOST_CONFIG_LOG(dev->ifname, INFO, "Request %s (%u) handled successfully", + VHOST_LOG_CONFIG(dev->ifname, INFO, "Request %s (%u) handled successfully\n",