From patchwork Wed Feb 12 16:38:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shani Peretz X-Patchwork-Id: 151434 X-Patchwork-Delegate: stephen@networkplumber.org Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7C5A146204; Wed, 12 Feb 2025 17:39:00 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 49B7A427E8; Wed, 12 Feb 2025 17:39:00 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2073.outbound.protection.outlook.com [40.107.237.73]) by mails.dpdk.org (Postfix) with ESMTP id 3F3EF42707; Wed, 12 Feb 2025 17:38:58 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZP63qsz0dh4O18/WIgus3anDUTMysB1mrL4TFABQsGqXo3HM/u1ICU/ozfjN1svopAWpMx8G6diVMVLUqTYRIox9qg2s1LQi/OqToZhTML9pJNoXCD81qQInrPiLObulJzGsJ90jKDGDjDjY6GRDfdZlSaygt0Ws3uLsKnYbCU9ggCFxakkayB1lYWuBd0EZyB2MOWqugLpxUc5cAsYw/AuMkkfoQgtqx+sDvpT8xksT/Wc4atcBvYfX6JKnk3niIpnX1XaUxbNv8LbZ2bL1t5XIkAXZ8LqorH8PfFi2maBoU14WY2yVbP0QKYmfoP3LNFN1bWiBVwmgKvTWOCBhXA== 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=LRkOmjXY62KhiNlrMy273Nr803nhri+0TQwaxHpgQRQ=; b=BG4GIYk4Q9q3bjmdpFEWn0di67bVYSIm2cO1lJq4nMw03TyZLtKElh0oUNn6xJpilTnhV6aX1vZK/9A4eNZ9BG1Tu3mokjnofUqiFi58IV5eyyq9yKPYZpb8A3+85cGBLTA+i+x746SqaUm7yJP9VHENlYMdJJBt2s+0MOL0dd+fxZR2ftkg0iiWKLNmVM3LTBaNw2U22TVfIQLEJ9zggDH/PK9oRCJxRgqlMElhyTXS7SV0nbGLzSJWah2kvZPW0nB3qReOOV/dl/KivM5a/QfhQcz8iPJU/rlPH65Aw+PcPE3Jp13lznWKhQqXmHeJY6ZNwPuwhwjZ5yG0JIoizg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=dpdk.org 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=LRkOmjXY62KhiNlrMy273Nr803nhri+0TQwaxHpgQRQ=; b=TXx/wnpdYnK4ANfGf5/KEGiEMLBDV/pchV4aZln1sqFyL2IXXwXZAJjSvSSb7X3mUY8chZwInmqrI9vBqIlWsLbLnTczHYl4PBeFljphtTBmjkTIOmwBaHGwDC4TuT5M0LYY+zE9RoYPeAnN60JTE8ZWD9fDVkxSpOTINhWJe8lmc9MayH7A1s0lhU8Zl77jWvljWPQentdgzMIMW86m1rJ9DXa7yfVR2viA3ob3QJ8gh7t12O2+q6Kym3zGjBSIzu/2I75mRmkhwjxDRjF2ICZYDiM61geKghkhAFDUS6ybYtfe551spqIxwpGFzVL/iGLRfRNdlDx3OcBPmrTplw== Received: from MN0PR04CA0005.namprd04.prod.outlook.com (2603:10b6:208:52d::9) by CY5PR12MB6346.namprd12.prod.outlook.com (2603:10b6:930:21::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.16; Wed, 12 Feb 2025 16:38:53 +0000 Received: from BL6PEPF0001AB57.namprd02.prod.outlook.com (2603:10b6:208:52d:cafe::21) by MN0PR04CA0005.outlook.office365.com (2603:10b6:208:52d::9) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.31 via Frontend Transport; Wed, 12 Feb 2025 16:38:53 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BL6PEPF0001AB57.mail.protection.outlook.com (10.167.241.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Wed, 12 Feb 2025 16:38:53 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Wed, 12 Feb 2025 08:38:42 -0800 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 12 Feb 2025 08:38:42 -0800 Received: from nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 12 Feb 2025 08:38:40 -0800 From: Shani Peretz To: CC: , Shani Peretz , , Chenbo Xia , Nipun Gupta , Gaetan Rivet Subject: [PATCH v7 1/4] bus/pci: fix registration of PCI device Date: Wed, 12 Feb 2025 18:38:32 +0200 Message-ID: <20250212163836.178976-1-shperetz@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250206105428.237346-1-shperetz@nvidia.com> References: <20250206105428.237346-1-shperetz@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB57:EE_|CY5PR12MB6346:EE_ X-MS-Office365-Filtering-Correlation-Id: 0527dec8-9215-405c-2239-08dd4b83bc89 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|1800799024|82310400026; X-Microsoft-Antispam-Message-Info: M7uxWzwU6hWXaPjJFDVcXB5kcHo22sOh8u6pwcblzHN+f7RvlnoXaQpHLVi2DmGTzfWYwbUMOsMqiiPWdHyzlmSeKhOjSjhLm5A6sACMm8Pw21p6hkUnDdCKboaHJbvZwY4It0GvmBgk7Gs8enCufzKZYaDTrqKg2XDpocb17Lflkq6HgOASdNevJP4XVCREzsKP4q8qEkMeyLxMPK3pY9j+/PGuUAVCYh0VeODb/DcmKAzCAQ2yldVBczAVIVeKziaZfgh4/hg2xGzfpundv1iMWqgYI717f2zsHl0dkXfrk6SNC/5Rrly/9Y7RmIPQr9gTGVLt1r0+FiUn1fBOj/y1bVM2WRGmo46EViSLdcKlTlZl4gSasjkFi+oenr28LTIDd7qcD26BEgiUcqTkUfHWYDl3NOcLxYEvs8q6AW2htuD5rfNLVPGaeC2+Q+fHyfgYgW382i4gYARPmPbOKWutDG1BlKSLy9wwCIqPNCenpwvhKhRzIyn9tIVwIjqtQGLLbbMDj7eDdPwE2h3nUxtFhAe05YAb+UDcB9KOwH5kHvmnaYiDJVqYM4JkSoOqK4JbIYzzjuJTHYfA4z0ZKydPy4p2ddpNYPNDg58K2xgudKEwb1U/iSnFn6/gLBicK9AvPE2V+Y01t6jcn9JwEhT5SqvdPqDEgtkssmR8ohXSVf+5d4wTnLc3iYvyrobNCauLCTbffr3LXX1duTmwMqCZyoF1Kq/bK2MG+sOWas0+xWSeYdjN6TZ2iM3TGlZHFqnj/5qkOu95q8p/uS77/tjFaCMbI//hIQtB2rIUMo3O60dekfnmpOpMzfpYd7uNRAIBzC/0I9Az1yd3yvHjBu4gJtpesDPbY50oeIccpzVgtRMLN117nWWsi1EsemI0OGwAWvUwa/frD0sFocGQlsK3MBIAb93u19P0mHu6M4YL9C7P0ezsoE3Jf3ogmHL2HG1FGSuPs+ITjIbkG5hZAVhw8aND8uSeeYx8CLR8gfyHYus9fBzezuSJtXgF2sNmrYZwp4d+u4zrh3OIh55+NMo/82o6+5vMCQhh67ys6gPmkzVb5mT9gU8UhgaQxb6i7L4jUov6ssV8v7diV9YtQZVrECEuAjAQjI7QxVCzhIGM6ZmoX8BDIjaL83mkHVkExMdZ4wSXGs71//6E68ZZtE7ptmeyLchL4eVbFhRYwReIZ+QtUe3j/8MHMe0ob6/VNzo/UUmTSNCdBgQd+iFMMc2JhneKuU8SSHllV2fEWeq8kt7R5OoAC1OM1CUxIdQw/Zv5Rww3Oc8Rj4DimbPRR8TQuCM8r1WfQWal22sSsi7TMqv6Ism8O/ydCyegCtXWxc3zOc2Z1ScpqDI79VlKJVZlNR7cpXOazG0gj56X86fSzqfYXhR98Vn0i+jxEVjDryAc2as9p/7LdgO99QPhuQU3bWRCupXXNWk3FHSVYu4ZYwi/rPLS9SOSN2ak2Ir9pM4awbcGcgN4Khx8JTeXYCFJLdCAdiMbMOWi3+07BLY= X-Forefront-Antispam-Report: CIP:216.228.118.232; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge1.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(376014)(1800799024)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2025 16:38:53.0349 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0527dec8-9215-405c-2239-08dd4b83bc89 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.232]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB57.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6346 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org When registering a new PCI device, the device->name field stored the user-provided string from devargs (e.g., "08:00.0" or "0000:08:00.0"). This approach led to inconsistencies when registering new devices. This patch fix this issue by saving the parsed PCI in device->name, so when a new PCI device is registering the name displayed in the device list will be the parsed version. Fixes: 23eaa9059ec2 ("bus/pci: use given name as generic name") Cc: stable@dpdk.org Signed-off-by: Shani Peretz Acked-by: Stephen Hemminger Acked-by: Stephen Hemminger --- drivers/bus/pci/pci_common.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c index 1173f0887c..70faae4e44 100644 --- a/drivers/bus/pci/pci_common.c +++ b/drivers/bus/pci/pci_common.c @@ -99,21 +99,11 @@ pci_common_set(struct rte_pci_device *dev) /* Each device has its internal, canonical name set. */ rte_pci_device_name(&dev->addr, dev->name, sizeof(dev->name)); + dev->device.name = dev->name; + devargs = pci_devargs_lookup(&dev->addr); dev->device.devargs = devargs; - /* When using a blocklist, only blocked devices will have - * an rte_devargs. Allowed devices won't have one. - */ - if (devargs != NULL) - /* If an rte_devargs exists, the generic rte_device uses the - * given name as its name. - */ - dev->device.name = dev->device.devargs->name; - else - /* Otherwise, it uses the internal, canonical form. */ - dev->device.name = dev->name; - if (dev->bus_info != NULL || asprintf(&dev->bus_info, "vendor_id=%"PRIx16", device_id=%"PRIx16, dev->id.vendor_id, dev->id.device_id) != -1) From patchwork Wed Feb 12 16:38:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shani Peretz X-Patchwork-Id: 151435 X-Patchwork-Delegate: stephen@networkplumber.org Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 311C546204; Wed, 12 Feb 2025 17:39:09 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1DBEB42DBB; Wed, 12 Feb 2025 17:39:09 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2047.outbound.protection.outlook.com [40.107.93.47]) by mails.dpdk.org (Postfix) with ESMTP id DE0D842D9D for ; Wed, 12 Feb 2025 17:39:07 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RcYTghzUVfZPLkEpH+07aP8jI29HxRMQZGXKK5LkiEzLyZQHALc/c6flfVX19KB18zE1h71WOUlYvf3Lg/uiLi6qLCVNIgllecjfAr10Hc1EsZFLIQIjhXq8tlnpVnmklnd8IgBYVdcsyBeB6z7J5aPL+OX5OV7V4NIHaKgfXbSlEsmvwIHt+2fgOwipezLVKFvCjYiP/gl9gQrn9Pb8Chc6EzM+kg4Bsi54XOan9UC4qfNv0S1XU931sN+jhcm83omwz1iTQ8YI25HBUfKH7LaVYA0JUwMpAxHFtHyskCp/f1Tb6waH1OC20LUZwIPc2EkW642FnjCMpeKU8FAqOQ== 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=taiiaUZUT3IzWCJOtdTqm2y2PblTQTLI2LMrIhHPAu8=; b=vpmW/gTGsDKt++UZiQIMQxFx7XaWouLyoNBrJdDZ7NuEJocd0a7yLdqtlPKf8tL/HiMlidN0UaNqIIgSmMrkLa5AZ+ww3Y4nCIDka2Dwr2dIw1+b2gWI8sj6qccbbCo1HucuqRiD0YXUwacXI4At8cCF9JF/rD96gHYYXSqqniZAbwAKe7P88iapYFUi1sEf14d7CuqqKlS10cxRiBSnpOKYkYhcZZpdQK+BAfNL76C80vjNyicE4uUZu+nMlKybuDzbhF5Cs66YscCw3k5Vy2AkjvvQNnCMLgEe16OarQW1iiXnCxvj7TeGHqXMwKJJtTa2tp+3vcE8/fWP2sG/XQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=dpdk.org 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=taiiaUZUT3IzWCJOtdTqm2y2PblTQTLI2LMrIhHPAu8=; b=L2vLxgZE9E3luzt8RvbDvD3tuWuMkyF8BEu5Jgu4hzhoDv4BuJiD7rdApPyoh5hxt2YqulpiP0r2xhoUjZyuj3rV9BH6VgvSBVEZFRaG2jAfWG/XYelqcOkm/l/BrLOf3mE2yjgbbIWN8f+2+qsXe8BnTR4XlyggbGPK9luQDbM+VRetdN+boiCrlEhcRWyJfFlJ75yMdj8oGNkl4CJZ54lHIwkNmPc8q7n7jYyhPNXtV8ZqDvcYSyPgm4yYq3CNGS7tkoh3Ogx2o8wWNgiG2xSjfBc1qRFiSPdqfBn3OP0s91l1FjTNlvAPDsyECfJki+9kiJzpO77K+vZIJ1Y/ww== Received: from BN1PR12CA0015.namprd12.prod.outlook.com (2603:10b6:408:e1::20) by PH7PR12MB6418.namprd12.prod.outlook.com (2603:10b6:510:1fe::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Wed, 12 Feb 2025 16:39:00 +0000 Received: from BL6PEPF0001AB53.namprd02.prod.outlook.com (2603:10b6:408:e1:cafe::52) by BN1PR12CA0015.outlook.office365.com (2603:10b6:408:e1::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8445.13 via Frontend Transport; Wed, 12 Feb 2025 16:39:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BL6PEPF0001AB53.mail.protection.outlook.com (10.167.241.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Wed, 12 Feb 2025 16:39:00 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Wed, 12 Feb 2025 08:38:48 -0800 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 12 Feb 2025 08:38:47 -0800 Received: from nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 12 Feb 2025 08:38:43 -0800 From: Shani Peretz To: CC: , Shani Peretz , "Tyler Retzlaff" , Parav Pandit , Xueming Li , Nipun Gupta , "Nikhil Agarwal" , Hemant Agrawal , Sachin Saxena , Rosen Xu , "Chenbo Xia" , Tomasz Duszynski , "Chengwen Feng" , Long Li , Wei Hu , Bruce Richardson , "Kevin Laatz" , Jan Blunck Subject: [PATCH v7 2/4] lib: fix comparison between devices Date: Wed, 12 Feb 2025 18:38:33 +0200 Message-ID: <20250212163836.178976-2-shperetz@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250212163836.178976-1-shperetz@nvidia.com> References: <20250206105428.237346-1-shperetz@nvidia.com> <20250212163836.178976-1-shperetz@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB53:EE_|PH7PR12MB6418:EE_ X-MS-Office365-Filtering-Correlation-Id: 486c1f81-8505-4b91-363b-08dd4b83c0b3 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: UapMqa8Mj6H1kp5/oJ8L6W0OxVE4kWj23ji38BP5Fg8Vcsm0UahsmvCOtGVwNT5yr9dY18K8dCYe1DHFjZ2UviKUo726fCerhqMREZS7YDeX6EqX5G95DmYCWTVY3Wxi3VbwGM1XPK3pHhNqjYYJLL163zbVZFzYmvSZMDYOhy+W95zrL/aNpsNfFAO06YhLf7kWe+tHTV2sjEKbVtnm7yAD+MDxOMao39uYYBhjfhd9eT4DtG4M+aOBd/ve3BgjTWrRZd6elY3tTgySMdxmJuoY8wCrvCo3CG3i1qR65LMY2Fc1yn3+8RjVpFE5DPWiUHPmP3GcFkrjkFSXED+/LfxH+9ggFHG7Aof0um3V343ONjt02UcVp3IwxlZBS12Ch9zk5BiUzYA1F/8zEmPXh7fhDZBkss9rElYO/2k5sVnx7pTEGH+VLDVKow5TBJWpPJy6EcuHD7MKMKBUqXKAOfYDKQnp7rsnjh0hgnksqlSyUBBHBCqkStyiFCVJaoBAJupL0j7Wltdkxmb0zbj6288c9oYmJc9VXrJPdp6q1vawd3GxY1xNwJMZvPe4UOT6MxHynE4RwdI3Kr8kkvAE+8PAZkAuEb1modVzF112vn25U6TXpDig3buWQlkOGJpXX4COinhL7Sjo1hCXCmloW8wqyJPr9Ers6pexw3zzwR1a+xZf9Gv2umDO8UpS1ajE1RL9dPEWE3qV02GmqbVCbsoN83nGqQAKGX79/iSxlPF3hALl+3Nf1Bsa1D1a2SE3MLL0wm6/oXr1kV+z/NXB9c5TC5jGhnDoJelFylzEQHRqsBI6TTdgacouCp3Lg0aiGC/p7O55gFV/UD+/m6EO+Q9b4NQdu/cKTx3gOLIEncBbkA1xSPIpHWSmki/RAdM9WzxLqIJ1MmQRnxFRc4BoFaWUGYC33b4FsJyu0wY9IAsHz533aFb5cNs+STvPcA0yeUgiMOY/ToCi9oHJzDiqdb4EHfnmgn2mc3UJ5LeLUt1pymWuG4KgD7fJSeRluTPDbejYfIyERbthD2zbq85MONJLryofgkN9fmwef99y+XPuwc1yovhNIIlQZdqVACHYAeK+ZFiF+HHXpeaHzwF8/tyBsAR1q6yqiCcg8AkYTwGTyZTvK2scWzp+klsKlIFzdmzfAU9v9GjfTtojTWNuAW4zNvu7PBEOV3GxEISSWMV2H6quT6qjt8Nq//s61xAXwsR4UD0M/ZRpEWW+pPoltQXdpCeRUe0NuvGv7R29PzuHyqvrVuV+v734PFcC568nZ6r0dGwovFh/7jd++A9xlsG2lAek8kb/xTsad5MquPJnEHnMpPDvLmgaa35KYZ2GXqy35PjU0WkETZKyK/VLJD1fmZzvfQkLG7DFtJZ0myNvbRPoZ5Rb6wxAwBCqp2ARkrBsybMDLgwl6DeClmzArLXmejmmU/+YvoL3TWssa1a4hhougpsNlQZelA6ii2CsYs4rBByqcEy4Vd7ymNf3oJFwdW3fAZ4oUGPP/HpEeCw= X-Forefront-Antispam-Report: CIP:216.228.118.232; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(36860700013)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2025 16:39:00.0216 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 486c1f81-8505-4b91-363b-08dd4b83c0b3 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.232]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB53.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6418 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DPDK supports multiple formats for specifying buses, (such as "0000:08:00.0" and "08:00.0" for PCI). This flexibility can lead to inconsistencies when using one format while running testpmd, then attempts to use the other format in a later command, resulting in a failure. The issue arises from the find_device function, which compares the user-provided string directly with the device->name in the rte_device structure. If we want to accurately compare these names, we'll need to bring both sides to the same representation by invoking the parse function on the user input. The proposed solution is to utilize the parse function implemented by each bus. When comparing names, we will call parse on the supplied string as well as on the device name itself and compare the results. As part of the change the parse function will now recive the address to write to and the size of the pointer, in addition it will return the size of the parsed address. This will allow consistent comparisons between different representations of same devices. In addition, fixed vdev test to use the rte_cmp_dev_name function instead of the custom one. Fixes: a3ee360f4440 ("eal: add hotplug add/remove device") Signed-off-by: Shani Peretz --- app/test/test_devargs.c | 2 +- app/test/test_vdev.c | 10 ++---- drivers/bus/auxiliary/auxiliary_common.c | 17 +++++++--- drivers/bus/cdx/cdx.c | 13 +++++--- drivers/bus/dpaa/dpaa_bus.c | 9 ++++-- drivers/bus/fslmc/fslmc_bus.c | 11 ++++--- drivers/bus/ifpga/ifpga_bus.c | 14 +++++--- drivers/bus/pci/pci_common.c | 7 ++-- drivers/bus/platform/platform.c | 15 ++++++--- drivers/bus/uacce/uacce.c | 14 +++++--- drivers/bus/vdev/vdev.c | 23 +++++++++++-- drivers/bus/vmbus/vmbus_common.c | 11 ++++--- drivers/dma/idxd/idxd_bus.c | 9 ++++-- drivers/raw/ifpga/ifpga_rawdev.c | 8 +---- lib/eal/common/eal_common_bus.c | 2 +- lib/eal/common/eal_common_dev.c | 41 +++++++++++++++++++++--- lib/eal/common/hotplug_mp.c | 11 ++----- lib/eal/include/bus_driver.h | 27 +++++++++++++++- lib/eal/include/rte_dev.h | 15 +++++++++ lib/eal/linux/eal_dev.c | 10 +----- lib/eal/version.map | 1 + 21 files changed, 187 insertions(+), 83 deletions(-) diff --git a/app/test/test_devargs.c b/app/test/test_devargs.c index 4166b2bea2..575a49ea82 100644 --- a/app/test/test_devargs.c +++ b/app/test/test_devargs.c @@ -171,7 +171,7 @@ test_valid_devargs(void) int ret; ret = test_valid_devargs_cases(list, RTE_DIM(list)); - if (vdev_bus != NULL && vdev_bus->parse("net_ring0", NULL) == 0) + if (vdev_bus != NULL && vdev_bus->parse("net_ring0", NULL, 0, NULL) == 0) /* Ring vdev driver enabled. */ ret |= test_valid_devargs_cases(legacy_ring_list, RTE_DIM(legacy_ring_list)); diff --git a/app/test/test_vdev.c b/app/test/test_vdev.c index 3e262f30bc..860fa260af 100644 --- a/app/test/test_vdev.c +++ b/app/test/test_vdev.c @@ -20,12 +20,6 @@ static const char * const valid_keys[] = { NULL, }; -static int -cmp_dev_name(const struct rte_device *dev, const void *name) -{ - return strcmp(rte_dev_name(dev), name); -} - static int cmp_dev_match(const struct rte_device *dev, const void *_kvlist) { @@ -82,7 +76,7 @@ test_vdev_bus(void) printf("Failed to create vdev net_null_test0\n"); goto fail; } - dev0 = vdev_bus->find_device(NULL, cmp_dev_name, "net_null_test0"); + dev0 = vdev_bus->find_device(NULL, rte_cmp_dev_name, "net_null_test0"); if (dev0 == NULL) { printf("Cannot find net_null_test0 vdev\n"); goto fail; @@ -93,7 +87,7 @@ test_vdev_bus(void) printf("Failed to create vdev net_null_test1\n"); goto fail; } - dev1 = vdev_bus->find_device(NULL, cmp_dev_name, "net_null_test1"); + dev1 = vdev_bus->find_device(NULL, rte_cmp_dev_name, "net_null_test1"); if (dev1 == NULL) { printf("Cannot find net_null_test1 vdev\n"); goto fail; diff --git a/drivers/bus/auxiliary/auxiliary_common.c b/drivers/bus/auxiliary/auxiliary_common.c index e6cbc4d356..f8a064a400 100644 --- a/drivers/bus/auxiliary/auxiliary_common.c +++ b/drivers/bus/auxiliary/auxiliary_common.c @@ -237,10 +237,9 @@ auxiliary_probe(void) } static int -auxiliary_parse(const char *name, void *addr) +auxiliary_parse(const char *name, void *addr, int addr_size, int *out_size) { struct rte_auxiliary_driver *drv = NULL; - const char **out = addr; /* Allow empty device name "auxiliary:" to bypass entire bus scan. */ if (strlen(name) == 0) @@ -250,9 +249,17 @@ auxiliary_parse(const char *name, void *addr) if (drv->match(name)) break; } - if (drv != NULL && addr != NULL) - *out = name; - return drv != NULL ? 0 : -1; + + if (drv == NULL) + return -1; + + if (out_size != NULL) + *out_size = strlen(name) + 1; + + if (addr != NULL) + rte_strscpy(addr, name, addr_size); + + return 0; } /* Register a driver */ diff --git a/drivers/bus/cdx/cdx.c b/drivers/bus/cdx/cdx.c index 62b108e082..85a50ff476 100644 --- a/drivers/bus/cdx/cdx.c +++ b/drivers/bus/cdx/cdx.c @@ -464,15 +464,20 @@ cdx_probe(void) } static int -cdx_parse(const char *name, void *addr) +cdx_parse(const char *name, void *addr, int addr_size, int *out_size) { - const char **out = addr; int ret; ret = strncmp(name, CDX_DEV_PREFIX, strlen(CDX_DEV_PREFIX)); - if (ret == 0 && addr) - *out = name; + if (ret != 0) + return ret; + + if (out_size != NULL) + *out_size = strlen(name) + 1; + + if (addr != NULL) + rte_strscpy(addr, name, addr_size); return ret; } diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c index 9ffbe07c93..8526bc258d 100644 --- a/drivers/bus/dpaa/dpaa_bus.c +++ b/drivers/bus/dpaa/dpaa_bus.c @@ -153,7 +153,7 @@ dpaa_devargs_lookup(struct rte_dpaa_device *dev) char dev_name[32]; RTE_EAL_DEVARGS_FOREACH("dpaa_bus", devargs) { - devargs->bus->parse(devargs->name, &dev_name); + devargs->bus->parse(devargs->name, &dev_name, sizeof(dev_name), NULL); if (strcmp(dev_name, dev->device.name) == 0) { DPAA_BUS_INFO("**Devargs matched %s", dev_name); return devargs; @@ -447,7 +447,7 @@ dpaa_portal_finish(void *arg) } static int -rte_dpaa_bus_parse(const char *name, void *out) +rte_dpaa_bus_parse(const char *name, void *out, int addr_size, int *out_size) { unsigned int i, j; size_t delta, dev_delta; @@ -494,6 +494,9 @@ rte_dpaa_bus_parse(const char *name, void *out) max_name_len = sizeof("fm.-mac..") - 1; } + if (out_size != NULL) + *out_size = max_name_len + 1; + if (out != NULL) { char *out_name = out; @@ -502,7 +505,7 @@ rte_dpaa_bus_parse(const char *name, void *out) * will be a ',' instead. Not copying past this comma is not an * error. */ - strlcpy(out_name, &name[delta], max_name_len + 1); + strlcpy(out_name, &name[delta], addr_size); /* Second digit of mac%u could instead be ','. */ if ((strlen(out_name) == max_name_len) && diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c index 68ad2b801e..2cd666c218 100644 --- a/drivers/bus/fslmc/fslmc_bus.c +++ b/drivers/bus/fslmc/fslmc_bus.c @@ -103,7 +103,7 @@ fslmc_devargs_lookup(struct rte_dpaa2_device *dev) char dev_name[32]; RTE_EAL_DEVARGS_FOREACH("fslmc", devargs) { - devargs->bus->parse(devargs->name, &dev_name); + devargs->bus->parse(devargs->name, &dev_name, sizeof(dev_name), NULL); if (strcmp(dev_name, dev->device.name) == 0) { DPAA2_BUS_INFO("**Devargs matched %s", dev_name); return devargs; @@ -235,7 +235,7 @@ scan_one_fslmc_device(char *dev_name) } static int -rte_fslmc_parse(const char *name, void *addr) +rte_fslmc_parse(const char *name, void *addr, int addr_size, int *out_size) { uint16_t dev_id; char *t_ptr; @@ -298,8 +298,11 @@ rte_fslmc_parse(const char *name, void *addr) goto err_out; } - if (addr) - strcpy(addr, sep); + if (out_size != NULL) + *out_size = strlen(sep) + 1; + + if (addr != NULL) + rte_strscpy(addr, sep, addr_size); ret = 0; err_out: diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c index 11b31eee4f..87884401c3 100644 --- a/drivers/bus/ifpga/ifpga_bus.c +++ b/drivers/bus/ifpga/ifpga_bus.c @@ -459,9 +459,8 @@ ifpga_find_device(const struct rte_device *start, return NULL; } static int -ifpga_parse(const char *name, void *addr) +ifpga_parse(const char *name, void *addr, int addr_size __rte_unused, int *out_size) { - int *out = addr; struct rte_rawdev *rawdev = NULL; char rawdev_name[RTE_RAWDEV_NAME_MAX_LEN]; char *c1 = NULL; @@ -491,9 +490,14 @@ ifpga_parse(const char *name, void *addr) rawdev = rte_rawdev_pmd_get_named_dev(rawdev_name); if ((port < IFPGA_BUS_DEV_PORT_MAX) && - rawdev && - (addr != NULL)) - *out = port; + rawdev) { + if (out_size != NULL) + *out_size = sizeof(port); + + if (addr != NULL) + *(int *)addr = port; + } + if ((port < IFPGA_BUS_DEV_PORT_MAX) && rawdev) diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c index 70faae4e44..0e3d1dcc46 100644 --- a/drivers/bus/pci/pci_common.c +++ b/drivers/bus/pci/pci_common.c @@ -84,7 +84,7 @@ pci_devargs_lookup(const struct rte_pci_addr *pci_addr) struct rte_pci_addr addr; RTE_EAL_DEVARGS_FOREACH("pci", devargs) { - devargs->bus->parse(devargs->name, &addr); + devargs->bus->parse(devargs->name, &addr, sizeof(struct rte_pci_addr), NULL); if (!rte_pci_addr_cmp(pci_addr, &addr)) return devargs; } @@ -487,12 +487,15 @@ rte_pci_dump(FILE *f) } static int -pci_parse(const char *name, void *addr) +pci_parse(const char *name, void *addr, __rte_unused int addr_size, int *size) { struct rte_pci_addr *out = addr; struct rte_pci_addr pci_addr; bool parse; + if (size != NULL) + *size = sizeof(struct rte_pci_addr); + parse = (rte_pci_addr_parse(name, &pci_addr) == 0); if (parse && addr != NULL) *out = pci_addr; diff --git a/drivers/bus/platform/platform.c b/drivers/bus/platform/platform.c index 11892caa24..e6ab8b7ea1 100644 --- a/drivers/bus/platform/platform.c +++ b/drivers/bus/platform/platform.c @@ -542,11 +542,10 @@ platform_bus_unplug(struct rte_device *dev) } static int -platform_bus_parse(const char *name, void *addr) +platform_bus_parse(const char *name, void *addr, int addr_size, int *out_size) { struct rte_platform_device pdev = { }; struct rte_platform_driver *pdrv; - const char **out = addr; rte_strscpy(pdev.name, name, sizeof(pdev.name)); @@ -555,10 +554,16 @@ platform_bus_parse(const char *name, void *addr) break; } - if (pdrv != NULL && addr != NULL) - *out = name; + if (pdrv == NULL) + return -ENODEV; + + if (out_size != NULL) + *out_size = strlen(name) + 1; - return pdrv != NULL ? 0 : -ENODEV; + if (addr != NULL) + rte_strscpy(addr, name, addr_size); + + return 0; } static int diff --git a/drivers/bus/uacce/uacce.c b/drivers/bus/uacce/uacce.c index 9ca048122d..0e2215c16a 100644 --- a/drivers/bus/uacce/uacce.c +++ b/drivers/bus/uacce/uacce.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include "bus_uacce_driver.h" @@ -529,15 +530,20 @@ uacce_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, const void } static int -uacce_parse(const char *name, void *addr) +uacce_parse(const char *name, void *addr, int addr_size, int *out_size) { - const char **out = addr; int ret; ret = strncmp(name, UACCE_DEV_PREFIX, strlen(UACCE_DEV_PREFIX)); - if (ret == 0 && addr) - *out = name; + if (ret != 0) + return ret; + + if (out_size != NULL) + *out_size = strlen(name) + 1; + + if (addr != NULL) + rte_strscpy(addr, name, addr_size); return ret; } diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index ec7abe7cda..f369720cb1 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -113,7 +113,7 @@ rte_vdev_remove_custom_scan(rte_vdev_scan_callback callback, void *user_arg) } static int -vdev_parse(const char *name, void *addr) +vdev_find_driver(const char *name, void *addr) { struct rte_vdev_driver **out = addr; struct rte_vdev_driver *driver = NULL; @@ -197,7 +197,7 @@ vdev_probe_all_drivers(struct rte_vdev_device *dev) name = rte_vdev_device_name(dev); VDEV_LOG(DEBUG, "Search driver to probe device %s", name); - if (vdev_parse(name, &driver)) + if (vdev_find_driver(name, &driver)) return -1; iova_mode = rte_eal_iova_mode(); @@ -232,6 +232,23 @@ find_vdev(const char *name) return NULL; } +static int +vdev_parse(const char *name, void *addr, int addr_size, int *out_size) +{ + struct rte_vdev_driver *driver; + + if (vdev_find_driver(name, &driver)) + return 1; + + if (out_size != NULL) + *out_size = strlen(name) + 1; + + if (addr != NULL) + rte_strscpy(addr, name, addr_size); + + return 0; +} + static struct rte_devargs * alloc_devargs(const char *name, const char *args) { @@ -647,7 +664,7 @@ vdev_get_iommu_class(void) TAILQ_FOREACH(dev, &vdev_device_list, next) { name = rte_vdev_device_name(dev); - if (vdev_parse(name, &driver)) + if (vdev_find_driver(name, &driver)) continue; if (driver->drv_flags & RTE_VDEV_DRV_NEED_IOVA_AS_VA) diff --git a/drivers/bus/vmbus/vmbus_common.c b/drivers/bus/vmbus/vmbus_common.c index 8a965d10d9..ca69a5712d 100644 --- a/drivers/bus/vmbus/vmbus_common.c +++ b/drivers/bus/vmbus/vmbus_common.c @@ -245,14 +245,17 @@ rte_vmbus_cleanup(void) } static int -vmbus_parse(const char *name, void *addr) +vmbus_parse(const char *name, void *addr, int addr_size, int *out_size) { rte_uuid_t guid; int ret; + if (out_size != NULL) + *out_size = sizeof(guid); + ret = rte_uuid_parse(name, guid); - if (ret == 0 && addr) - memcpy(addr, &guid, sizeof(guid)); + if (ret == 0 && addr != NULL) + memcpy(addr, &guid, addr_size); return ret; } @@ -269,7 +272,7 @@ vmbus_devargs_lookup(struct rte_vmbus_device *dev) rte_uuid_t addr; RTE_EAL_DEVARGS_FOREACH("vmbus", devargs) { - vmbus_parse(devargs->name, &addr); + vmbus_parse(devargs->name, &addr, sizeof(rte_uuid_t), NULL); if (rte_uuid_compare(dev->device_id, addr) == 0) return devargs; diff --git a/drivers/dma/idxd/idxd_bus.c b/drivers/dma/idxd/idxd_bus.c index ba8076715d..350e4a44c1 100644 --- a/drivers/dma/idxd/idxd_bus.c +++ b/drivers/dma/idxd/idxd_bus.c @@ -47,7 +47,7 @@ static int dsa_probe(void); static struct rte_device *dsa_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, const void *data); static enum rte_iova_mode dsa_get_iommu_class(void); -static int dsa_addr_parse(const char *name, void *addr); +static int dsa_addr_parse(const char *name, void *addr, int addr_size, int *out_size); /** List of devices */ TAILQ_HEAD(dsa_device_list, rte_dsa_device); @@ -345,7 +345,7 @@ dsa_scan(void) closedir(dev_dir); return -ENOMEM; } - if (dsa_addr_parse(wq->d_name, &dev->addr) < 0) { + if (dsa_addr_parse(wq->d_name, &dev->addr, sizeof(dev->addr), NULL) < 0) { IDXD_PMD_ERR("Error parsing WQ name: %s", wq->d_name); free(dev); continue; @@ -391,11 +391,14 @@ dsa_get_iommu_class(void) } static int -dsa_addr_parse(const char *name, void *addr) +dsa_addr_parse(const char *name, void *addr, int addr_size __rte_unused, int *out_size) { struct dsa_wq_addr *wq = addr; unsigned int device_id, wq_id; + if (out_size != NULL) + *out_size = sizeof(struct dsa_wq_addr); + if (sscanf(name, "wq%u.%u", &device_id, &wq_id) != 2) { IDXD_PMD_DEBUG("Parsing WQ name failed: %s", name); return -1; diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c index 5b9b596435..7238246e1c 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.c +++ b/drivers/raw/ifpga/ifpga_rawdev.c @@ -1833,12 +1833,6 @@ ifpga_cfg_probe(struct rte_vdev_device *vdev) return ret; } -static int cmp_dev_name(const struct rte_device *dev, const void *_name) -{ - const char *name = _name; - return strcmp(dev->name, name); -} - static int ifpga_cfg_remove(struct rte_vdev_device *vdev) { @@ -1874,7 +1868,7 @@ ifpga_cfg_remove(struct rte_vdev_device *vdev) args.port, args.bdf); bus = rte_bus_find_by_name(RTE_STR(IFPGA_BUS_NAME)); if (bus) { - if (bus->find_device(NULL, cmp_dev_name, dev_name)) { + if (bus->find_device(NULL, rte_cmp_dev_name, dev_name)) { ret = rte_eal_hotplug_remove(RTE_STR(IFPGA_BUS_NAME), dev_name); } diff --git a/lib/eal/common/eal_common_bus.c b/lib/eal/common/eal_common_bus.c index 7cbd09c421..fc986570d6 100644 --- a/lib/eal/common/eal_common_bus.c +++ b/lib/eal/common/eal_common_bus.c @@ -200,7 +200,7 @@ bus_can_parse(const struct rte_bus *bus, const void *_name) { const char *name = _name; - return !(bus->parse && bus->parse(name, NULL) == 0); + return !(bus->parse && bus->parse(name, NULL, 0, NULL) == 0); } struct rte_bus * diff --git a/lib/eal/common/eal_common_dev.c b/lib/eal/common/eal_common_dev.c index 70aa04dcd9..b0a4739d5d 100644 --- a/lib/eal/common/eal_common_dev.c +++ b/lib/eal/common/eal_common_dev.c @@ -107,11 +107,42 @@ struct dev_next_ctx { #define CLSCTX(ptr) \ (((struct dev_next_ctx *)(intptr_t)ptr)->cls_str) -static int cmp_dev_name(const struct rte_device *dev, const void *_name) +int +rte_cmp_dev_name(const struct rte_device *dev1, const void *name2) { - const char *name = _name; + void *parsed_name1; + void *parsed_name2; + int size1 = 0; + int size2 = 0; + int ret; + + if (dev1->bus->parse(dev1->name, NULL, 0, &size1) != 0 || + dev1->bus->parse(name2, NULL, 0, &size2) != 0) + return 1; + + if (size1 != size2) + return 1; + + parsed_name1 = malloc(size1); + if (parsed_name1 == NULL) + return 1; + + parsed_name2 = malloc(size2); + if (parsed_name2 == NULL) { + free(parsed_name1); + return 1; + } - return strcmp(dev->name, name); + memset(parsed_name1, 0, size1); + memset(parsed_name2, 0, size2); + + dev1->bus->parse(dev1->name, parsed_name1, size1, NULL); + dev1->bus->parse(name2, parsed_name2, size2, NULL); + + ret = memcmp(parsed_name1, parsed_name2, size1); + free(parsed_name1); + free(parsed_name2); + return ret; } int @@ -197,7 +228,7 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev) if (ret) goto err_devarg; - dev = da->bus->find_device(NULL, cmp_dev_name, da->name); + dev = da->bus->find_device(NULL, rte_cmp_dev_name, da->name); if (dev == NULL) { EAL_LOG(ERR, "Cannot find device (%s)", da->name); @@ -335,7 +366,7 @@ rte_eal_hotplug_remove(const char *busname, const char *devname) return -ENOENT; } - dev = bus->find_device(NULL, cmp_dev_name, devname); + dev = bus->find_device(NULL, rte_cmp_dev_name, devname); if (dev == NULL) { EAL_LOG(ERR, "Cannot find plugged device (%s)", devname); return -EINVAL; diff --git a/lib/eal/common/hotplug_mp.c b/lib/eal/common/hotplug_mp.c index 17089ca3db..a2623c96c3 100644 --- a/lib/eal/common/hotplug_mp.c +++ b/lib/eal/common/hotplug_mp.c @@ -21,13 +21,6 @@ struct mp_reply_bundle { void *peer; }; -static int cmp_dev_name(const struct rte_device *dev, const void *_name) -{ - const char *name = _name; - - return strcmp(dev->name, name); -} - /** * Secondary to primary request. * start from function eal_dev_hotplug_request_to_primary. @@ -135,7 +128,7 @@ __handle_secondary_request(void *param) goto finish; } - dev = bus->find_device(NULL, cmp_dev_name, da.name); + dev = bus->find_device(NULL, rte_cmp_dev_name, da.name); if (dev == NULL) { EAL_LOG(ERR, "Cannot find plugged device (%s)", da.name); ret = -ENOENT; @@ -262,7 +255,7 @@ static void __handle_primary_request(void *param) goto quit; } - dev = bus->find_device(NULL, cmp_dev_name, da->name); + dev = bus->find_device(NULL, rte_cmp_dev_name, da->name); if (dev == NULL) { EAL_LOG(ERR, "Cannot find plugged device (%s)", da->name); ret = -ENOENT; diff --git a/lib/eal/include/bus_driver.h b/lib/eal/include/bus_driver.h index 60527b75b6..5a3e01b07d 100644 --- a/lib/eal/include/bus_driver.h +++ b/lib/eal/include/bus_driver.h @@ -112,11 +112,35 @@ typedef int (*rte_bus_unplug_t)(struct rte_device *dev); * should be written. If NULL, nothing should be written, which * is not an error. * + * @param[in] addr_size + * size of addr. + * + * @param[out] out_size + * device information size. If NULL, nothing should + * be written, which is not an error. + * * @return * 0 if parsing was successful. * !0 for any error. */ -typedef int (*rte_bus_parse_t)(const char *name, void *addr); +typedef int (*rte_bus_parse_t)(const char *name, void *addr, int addr_size, int *out_size); + +/** + * Bus specific device name comparison function. + * + * This type of function is used to compare a bus name with an arbitrary + * name. + * + * @param dev + * Device handle. + * + * @param name + * Name to compare against. + * + * @return + * 0 if the device matches the name. Nonzero otherwise. + */ +typedef int (*rte_bus_cmp_name_t)(const struct rte_device *dev, const void *name); /** * Parse bus part of the device arguments. @@ -258,6 +282,7 @@ struct rte_bus { rte_bus_plug_t plug; /**< Probe single device for drivers */ rte_bus_unplug_t unplug; /**< Remove single device from driver */ rte_bus_parse_t parse; /**< Parse a device name */ + rte_bus_cmp_name_t cmp_name; /**< Compare device name */ rte_bus_devargs_parse_t devargs_parse; /**< Parse bus devargs */ rte_dev_dma_map_t dma_map; /**< DMA map for device in the bus */ rte_dev_dma_unmap_t dma_unmap; /**< DMA unmap for device in the bus */ diff --git a/lib/eal/include/rte_dev.h b/lib/eal/include/rte_dev.h index 738400e8d1..2df8143af1 100644 --- a/lib/eal/include/rte_dev.h +++ b/lib/eal/include/rte_dev.h @@ -17,6 +17,7 @@ #include #include +#include #include #ifdef __cplusplus @@ -170,6 +171,20 @@ int rte_dev_is_probed(const struct rte_device *dev); int rte_eal_hotplug_add(const char *busname, const char *devname, const char *drvargs); +/** + * General device name comparison. Will compare by using the specific bus + * compare function or by comparing the names directly. + * + * @param dev + * Device handle. + * @param name + * Name to compare against. + * @return + * 0 if the device matches the name. Nonzero otherwise. + */ +__rte_internal +int rte_cmp_dev_name(const struct rte_device *dev, const void *name); + /** * Add matching devices. * diff --git a/lib/eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c index e63f24d108..3b68cda87f 100644 --- a/lib/eal/linux/eal_dev.c +++ b/lib/eal/linux/eal_dev.c @@ -91,14 +91,6 @@ static void sigbus_handler(int signum, siginfo_t *info, EAL_LOG(DEBUG, "Success to handle SIGBUS for hot-unplug!"); } -static int cmp_dev_name(const struct rte_device *dev, - const void *_name) -{ - const char *name = _name; - - return strcmp(dev->name, name); -} - static int dev_uev_socket_fd_create(void) { @@ -280,7 +272,7 @@ dev_uev_handler(__rte_unused void *param) goto failure_handle_err; } - dev = bus->find_device(NULL, cmp_dev_name, + dev = bus->find_device(NULL, rte_cmp_dev_name, uevent.devname); if (dev == NULL) { EAL_LOG(ERR, "Cannot find device (%s) on " diff --git a/lib/eal/version.map b/lib/eal/version.map index a20c713eb1..e50a95fd31 100644 --- a/lib/eal/version.map +++ b/lib/eal/version.map @@ -448,4 +448,5 @@ INTERNAL { rte_mem_unmap; rte_thread_create_internal_control; rte_thread_set_prefixed_name; + rte_cmp_dev_name; }; From patchwork Wed Feb 12 16:38:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shani Peretz X-Patchwork-Id: 151436 X-Patchwork-Delegate: stephen@networkplumber.org Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6BDA946204; Wed, 12 Feb 2025 17:39:16 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C087B42E12; Wed, 12 Feb 2025 17:39:12 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2058.outbound.protection.outlook.com [40.107.244.58]) by mails.dpdk.org (Postfix) with ESMTP id E546342DD1 for ; Wed, 12 Feb 2025 17:39:10 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aHmQmjVhHaTXYnWInOvOH74x/+fdwIcQaCuw+YPmH+ZI27yxLkgiz3fK0iYGXIVJv/eZAyTGvT3RQoZtPKECjupZwbTZGhzQ3s2yRNsGzbpipO8oIrGjQ4khBjAjIAsWQCuEz7CUMP3S2XpgRtZaGjFuC8ZsQliz7RwLHMGUm5c9jG+WWwBVm4hiDrH60iUtSHrnL4V1Gy682RHv1PveSz6UzuSMrP6gVu+UM5Mtnc8279nY1BvVavF8BU7PdxYfts42yaIsRRiTPAYsWqY4V1EgkrDJDlEWi/1fl0ORnWF7+NvgmtXBLMQ8hAZqPn+FrP8j1YDrNLRUc7HwhYkFqw== 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=RaE4hBP7MnukQtNIn5/fV7HxozTtIzykzjWQbw3oAhw=; b=phmVvPGv80wBrCiNnt+n/HNQ53h+5agZdqZGa85ZQRXIw2QWwCp2s+jRt1iXs4e2In5Gv3BBY+DN4kYS5OGZLbt9UlM9IPv4oiDJ4TZ6PHVktvSdxkCJWjb+mLVlbAqQ2zyibwHDZ2kSSfNFJ8NMD8vZ/2TcKqA1WZms+mIxNhqrHN/ex5IBO0fz0b+ONXnj+a2Tfxeln83JXwQ1Xzt0kg6JfhX/ttr8+jNrM9Z2XoZJpDTSwXadr3G5lghsHI7flPL2P7zGqwvPogbt2UeE7sTV6kjkjQqL7fCSjg2Z1mdg28kD5/iXLPRYshkK3/AG1MzoVva03LjWjJND3Qosyw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=dpdk.org 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=RaE4hBP7MnukQtNIn5/fV7HxozTtIzykzjWQbw3oAhw=; b=BV2HBDJBzQmDODC9O9ZhONpk1u+W3bR3eJSb1HdqFlhwyUZnv7GFzRdynyAGgEosKnsSBH2dH5v0/udaJkYrl+IlodQmtprgwMfRwU8mprFEEiJjR4owuPH4pCvVyQ8VGVN9kvXYvlkOwM1AH+hbSobIzfAQcOKmEvboBTnioDpK4dJ0TQrtzF8FCDEcQsjxsaco9YKYF4FNKaECujqVLhPmwdEX6GugbQCW5/zC006YV+cfoSZIx5MKJD5HvTqbL83CPnyyyQ/NEjooBekDMvJG3x/tcHl3lR618rN8sgPQ3xCbpJlZxBUp0ykcBherPNkpuNZrs1568jhMsEWIrA== Received: from SJ0PR05CA0007.namprd05.prod.outlook.com (2603:10b6:a03:33b::12) by SJ1PR12MB6340.namprd12.prod.outlook.com (2603:10b6:a03:453::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.13; Wed, 12 Feb 2025 16:39:07 +0000 Received: from MWH0EPF000971E9.namprd02.prod.outlook.com (2603:10b6:a03:33b:cafe::52) by SJ0PR05CA0007.outlook.office365.com (2603:10b6:a03:33b::12) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8445.12 via Frontend Transport; Wed, 12 Feb 2025 16:39:06 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by MWH0EPF000971E9.mail.protection.outlook.com (10.167.243.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Wed, 12 Feb 2025 16:39:06 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Wed, 12 Feb 2025 08:38:51 -0800 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 12 Feb 2025 08:38:50 -0800 Received: from nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 12 Feb 2025 08:38:49 -0800 From: Shani Peretz To: CC: , Shani Peretz , "Tyler Retzlaff" Subject: [PATCH v7 3/4] app/test: add tests to find devices Date: Wed, 12 Feb 2025 18:38:34 +0200 Message-ID: <20250212163836.178976-3-shperetz@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250212163836.178976-1-shperetz@nvidia.com> References: <20250206105428.237346-1-shperetz@nvidia.com> <20250212163836.178976-1-shperetz@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWH0EPF000971E9:EE_|SJ1PR12MB6340:EE_ X-MS-Office365-Filtering-Correlation-Id: 14e16a7c-c662-4a1b-225a-08dd4b83c47e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|36860700013|376014|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: 55WaydaZczJksu4FMtxxYMrO1f6Ev/CMOJmNflW9LxQLhmmsI+qgar8uwDXVlqCG820DqOe1hJ+bQLGL5q02G+iCLx01rfgaFHn99trjDXtOlH/mkrANNgQz29KsNwHz4ibqgonPvset3IiwzdexahZEu2S1sXsQO4E32Iu//uRbfhS7OnL1nowJNcslyh3B1j2uo1nQHHZR3yGneucbnqV8NM5ZPc2y21B3Rw2Pwp5tEDyAfNR7qbYbleCig4oE1/QJSwQo/N4PkJfaFbmV6p0HYHQe9dz++dm6vmqC8wQBaP/srasfPu/8Y0SGUIXJAJcaZoPNP+PIFVEXkSlGYTB2aUg4sjFcz5K+bJUWqlTp8rGJ8L7r+2336Htliw8lHvdomN9cBDFQkqKZ3CLVVIPBV4okHxB3vnpDVvbiPp5X79uSwPU7JXCuz8gEnlhWxOX+HiX4W7ORb9A24769Md19yAGAJOnq06QwzAcYD0kPTdqV56TDIPAQ7FhAcoqWuJLPngBR+XviJV1pXIPx8cwyxr9DBhJqmRRCyNzMqhC86a7LsB7AjxgTTiYc1jJFxgoidWpruGZAPzZYKadf+FR88vfC2SRmF48mkBRI3+V0VJKWPhjfG6aLqbnoQrBTZ9cIGflEgPZ7L7RqW5/M7ucd+X2nH6dtMreQu/0cb4fgKrF09f6qJ8CQA9ZaEJgvijJUE56yI5FRMhjRo8rdmPnWUWSY2MfWgB/kvP2hCq0PU4wiOlydpYZxzDaziXeKfuyEfGYH34KhCbCQsfSiGlSm48NWMQkZx+aF116U4pf+6vXSj8YPodw6EMPGGifPnlQEwmsir8YsPvypxAdZVYd4ohH2B6IGI5RHgWp+jLnUotHzZZezSZd4snacqDwZuPVL3ZOGdm5N+7i1AJel6LTVjZrGJJnNXsQNAm0x9TWTtCEhp0wO7bkc4ErkpM/ltvg2F5gmHwrkl+HyKk/9+agObWpm+4GD+7OwDJbDgeC6GU70DKZbFQEisGqd3r7Ueaf7jEQb9uwAyltp0d7vJpt4SDZoSe+5uRZg+yX+pxDRgxFpJowIVi40W2ZGEM1vnAwn5hyEGWdrUrNZZDfb93TQYKJgJnM1S64pDWl/FyvclAUFAaBnIypDPwMS4gpr8br50YY0K2uVS1pzj6SLvlwFt179EaQYGhxeiiudtPAMmJhzG+RqtLBI53ZjjfNbg6jVr8RiOEQ+4Z6jNlcok/lO8165s3+orI6tEFpq6O/AmRabBX3rvjGkSSnF2VLMztSEpVnx7ILFGklHgK7/VdGiDhveF4anjKHFj8+qXexNARIotCd9jcYmF0zBr3WXrRoMqEq/HYbr2BeMQpMpkSt8PbbVagXIJAPuzhGOOL56NLWZIy8A1NzYUR4Nm4UmEB582S1g8YxIMglEHiYq0nmRpqEPEdDDzhwt7AaDeLEOzAi93kjCTx7MfzFALGI9BoFe7gRJQRtJ9ULn4KzwH69G1jDK5h5bdDcPGJtOFSA= X-Forefront-Antispam-Report: CIP:216.228.118.233; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge2.nvidia.com; CAT:NONE; SFS:(13230040)(36860700013)(376014)(82310400026)(1800799024); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2025 16:39:06.4784 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 14e16a7c-c662-4a1b-225a-08dd4b83c47e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.233]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: MWH0EPF000971E9.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6340 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Added tests to PCI and vdev bus that compare and find devices in various forms of names under test_devargs. The tests check the functionality of the rte_cmp_dev_name function by calling it with different variations of names, like short and full, full and full, etc. Signed-off-by: Shani Peretz Acked-by: Stephen Hemminger --- app/test/test_devargs.c | 120 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) diff --git a/app/test/test_devargs.c b/app/test/test_devargs.c index 575a49ea82..e510f0491e 100644 --- a/app/test/test_devargs.c +++ b/app/test/test_devargs.c @@ -12,7 +12,9 @@ #include #include #include +#include +#include "virtual_pmd.h" #include "test.h" /* Check layer arguments. */ @@ -302,6 +304,118 @@ test_invalid_devargs_parsing(void) return fail; } +static struct rte_device * +create_pci_dev(const char *name) +{ + int port_id; + struct rte_ether_addr rand_ea = {0}; + rte_eth_random_addr(rand_ea.addr_bytes); + + char pmd_name[RTE_ETH_NAME_MAX_LEN]; + strlcpy(pmd_name, name, RTE_ETH_NAME_MAX_LEN); + + port_id = virtual_ethdev_create(pmd_name, + &rand_ea, rte_socket_id(), 1); + + if (port_id < 0) + return NULL; + + return (&rte_eth_devices[port_id])->device; +} + +static int +test_pci(struct rte_bus *pci_bus, const char *dev_name, const char *name2) +{ + struct rte_device *pci_dev = create_pci_dev(dev_name); + + if (pci_dev == NULL) + return -1; + + pci_dev->bus = pci_bus; + + if (rte_cmp_dev_name(pci_dev, name2) != 0) { + printf("rte_cmp_dev_name(%s, %s) device name (%s) not expected (%s)\n", + pci_dev->name, name2, pci_dev->name, name2); + return -1; + } + return 0; +} + +static int +test_vdev(struct rte_bus *vdev_bus, const char *dev_name, const char *name2) +{ + /* create vdev */ + if (rte_vdev_init(dev_name, "") < 0) { + printf("Failed to create vdev %s\n", dev_name); + return -1; + } + + struct rte_device *vdev_dev = vdev_bus->find_device(NULL, rte_cmp_dev_name, dev_name); + if (vdev_dev == NULL) { + printf("Cannot find %s vdev\n", dev_name); + rte_vdev_uninit(dev_name); + return -1; + } + int ret = rte_cmp_dev_name(vdev_dev, name2); + if (ret != 0) { + printf("rte_cmp_dev_name(%s, %s) device name (%s) not expected (%s)\n", + vdev_dev->name, name2, vdev_dev->name, name2); + return -1; + } + + if (vdev_dev != vdev_bus->find_device(NULL, rte_cmp_dev_name, name2)) { + printf("rte_cmp_dev_name(%s, %s) device name (%s) not expected (%s)\n", + vdev_dev->name, name2, vdev_dev->name, name2); + return -1; + } + + rte_vdev_uninit(dev_name); + return 0; +} + +static int +test_valid_cmp_dev_name(void) +{ + struct rte_bus *pci_bus = rte_bus_find_by_name("pci"); + struct rte_bus *vdev_bus = rte_bus_find_by_name("vdev"); + + if (pci_bus) { + if ((test_pci(pci_bus, "0000:08:11.0", "08:11.0") != 0) || + (test_pci(pci_bus, "08:12.0", "0000:08:12.0") != 0) || + (test_pci(pci_bus, "08:13.0", "08:13.0") != 0) || + (test_pci(pci_bus, "0000:08:14.0", "0000:08:14.0") != 0)) + return -1; + } + + if (vdev_bus) { + if (test_vdev(vdev_bus, "net_null_test0", "net_null_test0") != 0) + return -1; + } + return 0; +} + +static int +test_invalid_cmp_dev_name(void) +{ + struct rte_bus *pci_bus = rte_bus_find_by_name("pci"); + struct rte_bus *vdev_bus = rte_bus_find_by_name("vdev"); + + if (pci_bus) { + if ((test_pci(pci_bus, "0000:08:15.0", "08:00.0") == 0) || + (test_pci(pci_bus, "08:16.0", "0000:08:15.0") == 0) || + (test_pci(pci_bus, "08:17.0", "08:13.0") == 0) || + (test_pci(pci_bus, "0000:08:18.0", "0000:08:14.0") == 0)) + return -1; + } + + if (vdev_bus) { + if ((test_vdev(vdev_bus, "net_null_test0", "net_null_test") == 0) || + (test_vdev(vdev_bus, "net_null_test1", "net_null_test2") == 0)) + return -1; + } + return 0; +} + static int test_devargs(void) { @@ -317,6 +431,12 @@ test_devargs(void) printf("== test devargs parsing invalid case ==\n"); if (test_invalid_devargs_parsing() < 0) return -1; + printf("== test find device valid case ==\n"); + if (test_valid_cmp_dev_name() < 0) + return -1; + printf("== test find device invalid case ==\n"); + if (test_invalid_cmp_dev_name() < 0) + return -1; return 0; } From patchwork Wed Feb 12 16:38:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shani Peretz X-Patchwork-Id: 151437 X-Patchwork-Delegate: stephen@networkplumber.org Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5F8D746204; Wed, 12 Feb 2025 17:39:22 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 29F0842E47; Wed, 12 Feb 2025 17:39:22 +0100 (CET) Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2088.outbound.protection.outlook.com [40.107.100.88]) by mails.dpdk.org (Postfix) with ESMTP id 5885042E24 for ; Wed, 12 Feb 2025 17:39:20 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=muJ3IYlbF0TnS+RhIOtT1eLIG1wj7F8U5EyxSaaqFhhD0YGvBbhpVXe4BCehzsxHoLEOZrr331MTFt85LgGf1pHrP0MxcAYLy7BE822gl9ySkSXNvPAc2VF/9t2foolMNB4USfzlsC10yDZhat+s0f9sw5m42V8PL9sFva1XldEA1Lev6gtyPnvBjes3cRTOtMuCXmXIJ1ETsRx68MNeaU6yn811BgcnFyoQMCwRXwpEKrbfTc/cPsiBN5EKPHBzpBzJhYZDA80zFA+PA52kV1/RUWn8vv2wdFylsV7txuSlbDwWD3kcTxORS1aL3hreXLTjR/uW25W+W2zsrPqsVw== 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=zpNNSC8B0Be74FeVK2YHFSN4nP23ZTIyUBpx4Mel/EA=; b=hQRUO7Wkuxnl146okmypw4tXKqqBFpeHIR2nldEv9H+z94E7maAHJZ2CJx74vDDSC6jKjwfRfy6+WkxBYQpHC6Wk9wqmmMahaHF5yhF5JuvXwvWdzoJUxk07CiJFcvQiPRo6x6CiT5LvcmuCyJYK/WegaV8Ps6MGgKNDhtPgqqeFJAGUWnP3fZVdrVN7Sti2f0AWbBeK1pbK0+8g/Kldc6RWr5SP8hRTjDjKXRjifF+TThq9oQpERLBCpgdYXEONJ9RJn254tX9WHz8//AsSu7st5lDHwlIWoKfprRxHg1hOISxENhtzZV2QKHwansBP4Lw56qpTkrQmXbooKlg4Iw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=dpdk.org 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=zpNNSC8B0Be74FeVK2YHFSN4nP23ZTIyUBpx4Mel/EA=; b=YLcnVDY/qJuTXpcI7FE+v9O3+Yg598WjTTDuVTbuhdWwGy+XcNrgyQwuZfq3y9sSW2oqYRNOipCvFLDRtmhjj8+bet7HtWCMxE1AGiQQ4/GNhflOX5TdQ949MZN2k7RRL8EZjlr2Zy5PUNd2hukoNr5rSUCMo7my+8339Bg5ljB7BVb1LOqRx3vORlDfCNFN8F+K1BmXc9f7MTQniCVFWRQc5sviY9KAjhuKxEOfA7NAkCClP+cpZ6I6beS92JmdjgFXTOTFDbLkbi4WkNNOjyPoqjoDOTx6xj1tStR5MqYEBwPlE9BYtvSpJ3wK1Lo+8lqoYC4wFQwA4OxeYgx8QA== Received: from BN8PR04CA0045.namprd04.prod.outlook.com (2603:10b6:408:d4::19) by PH7PR12MB7307.namprd12.prod.outlook.com (2603:10b6:510:20b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.19; Wed, 12 Feb 2025 16:39:10 +0000 Received: from BL6PEPF0001AB55.namprd02.prod.outlook.com (2603:10b6:408:d4:cafe::78) by BN8PR04CA0045.outlook.office365.com (2603:10b6:408:d4::19) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8398.31 via Frontend Transport; Wed, 12 Feb 2025 16:39:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) 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.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by BL6PEPF0001AB55.mail.protection.outlook.com (10.167.241.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.10 via Frontend Transport; Wed, 12 Feb 2025 16:39:09 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Wed, 12 Feb 2025 08:38:57 -0800 Received: from drhqmail201.nvidia.com (10.126.190.180) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14; Wed, 12 Feb 2025 08:38:56 -0800 Received: from nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.14 via Frontend Transport; Wed, 12 Feb 2025 08:38:52 -0800 From: Shani Peretz To: CC: , Shani Peretz , "Tyler Retzlaff" , Parav Pandit , Xueming Li , Nipun Gupta , "Nikhil Agarwal" , Hemant Agrawal , Sachin Saxena , Rosen Xu , "Chenbo Xia" , Tomasz Duszynski , "Chengwen Feng" , Long Li , Wei Hu , Bruce Richardson , "Kevin Laatz" , Chas Williams , "Min Hu (Connor)" , Matan Azrad Subject: [PATCH v7 4/4] lib: change find device and cmp dev name functions Date: Wed, 12 Feb 2025 18:38:35 +0200 Message-ID: <20250212163836.178976-4-shperetz@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250212163836.178976-1-shperetz@nvidia.com> References: <20250206105428.237346-1-shperetz@nvidia.com> <20250212163836.178976-1-shperetz@nvidia.com> MIME-Version: 1.0 X-NV-OnPremToCloud: AnonymousSubmission X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL6PEPF0001AB55:EE_|PH7PR12MB7307:EE_ X-MS-Office365-Filtering-Correlation-Id: af1c762b-a806-40ad-bade-08dd4b83c676 X-LD-Processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|376014|7416014|36860700013|82310400026; X-Microsoft-Antispam-Message-Info: m4cAvFWKQ4veognGR81uz62y6hnMDVXeEnZpPIGWx/uZL8kGrU7efjX7jPyVrobAT06F+3iOjpAbUB6AKJ4PFgoiA5Jb/shxi5SImEmrsHVKWR8qHOcQgjAlKQHA0Mc6jeN4ql2Cu2dQZPDJD97nZhDRJk+BvWlmzGLqAh60pz1lkcymly8vtenhDDz7QbBsv5b8hSNbeJBm1cFFkohBkjvdZIWiP67pVDIiMp8NUZRlGsQg6H7f/ZHmLQ3fTpdWWChihmod31o73dNEUXLarla+R5CKlQhsm6hYATYqRQtScDXPpnr9W+zP7vJyCxamMuA1HA3rgiVbS7cAIZaCHQKaO9rtTzw8te7NFMgau22PFadJPlh6mqd88FTmKZSqcNBmR0Z9mGdoZWSf6xoJVOZ10kRXOZedmqMuRm0VMOjzmfeRtvuU0XRQCw2yenie9p9WKrM7j/W8+/afakGey+DEam7YyPX8c5rWJUUgLPvEhkgbiGjdUpibnBshREt6pE57Yi6OBa5mFG/LwoujZESuxHad1TiNk594m41DuPgErSYgoYZ9genoxaVYGKPyJMRhLu+EBiqfzr844vpb0heiwHFTkaU08lsf1JG4nXXVZK7TJLpqemjDxfGI+aIwSrSoy2vRTQghI1+7hOyEaQ5OUwUN1jORGOiv3dLoZMkwrdc82lOzflvIXE+k+0j2f3VJRG3nnc43H1NBDRiGy6F3moRqLQ8WvEJOV824R2+AcBLihSShsvk3q7fsLwTPWlJapHAmb3/Q80iQ+Twd9eK6pW1SvPfr3H15iYxWXXOOD092Vb5j2l7oiIVBqi2d1yE+hVyioRTp+0BFYXtzOz9rJKT1s8+eYH5QNwqtVZS5Lr+zz7k9rFDZ1A62uoGeq5UOcW1gQeXUHn+rk0ydIn//1MiKTnJ2/Wn6ODOYXVDcXdTOd3jPZ6dXTBSbeg0iDGRzUXjjouwtjvtiKLaj3qa7ClgfeHTt8pyHDM0ueB1PMPX0FZjYeLob5I+2/xCUV1Q8aLj6SyetCqCrykRJglpjkmMcwnodmKibxF0RoIm7zIwEetGy6/Ossf+rnrnwSoWaYt8BDWMSvpwmkr7OZ4qKiUdquJJtDBmd7QMO2tIQ/hAT6p1HE/tL9JtkS2Irb5ITi4OD+Hyp6G0TjjpPnQuipz7QXa8PgshK59uajgidCNiIs8Y+Ju5zpOH3xxD31hxJYZtyRGfX8nqbZvbc/A14Pqc3FG7ElXiu71fdoAWxNtXcugPXwzjPq9whamxZJbnb9rKMbTa0M/XvPi2JckhpnHwCqB7o4jdtPZ9y1pHYyr+AEl8QBDoFz8cfFDkodpNt7tFdKMUGiQv/8sbtavRY72JKdHK+3ygJBHXlgk9s4akp1nuCXoS34evJbYAl5rQ/cME2c1SJDTwAeibxAZV6hvGL8w3mcnBYqM7oauzjGfHlQ1a5+keuapZHqQY0MbXtr9I5yyvdS6m+QGU9Nbjv3E1MrUfWOauHxnXZjd4= X-Forefront-Antispam-Report: CIP:216.228.118.232; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge1.nvidia.com; CAT:NONE; SFS:(13230040)(1800799024)(376014)(7416014)(36860700013)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2025 16:39:09.6916 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: af1c762b-a806-40ad-bade-08dd4b83c676 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.232]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL6PEPF0001AB55.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7307 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Change find_device and rte_cmp_dev_name to accept a struct with pointer and size instead of a void* pointer. Signed-off-by: Shani Peretz --- app/test/test_devargs.c | 23 +++++++++++++++++++---- app/test/test_vdev.c | 23 ++++++++++++++++++----- drivers/bus/auxiliary/auxiliary_common.c | 2 +- drivers/bus/auxiliary/auxiliary_params.c | 10 +++++++--- drivers/bus/cdx/cdx.c | 12 ++++++++---- drivers/bus/dpaa/dpaa_bus.c | 2 +- drivers/bus/fslmc/fslmc_bus.c | 2 +- drivers/bus/ifpga/ifpga_bus.c | 2 +- drivers/bus/pci/pci_common.c | 2 +- drivers/bus/pci/pci_params.c | 10 +++++++--- drivers/bus/platform/platform.c | 3 ++- drivers/bus/platform/platform_params.c | 10 +++++++--- drivers/bus/uacce/uacce.c | 13 +++++++++---- drivers/bus/vdev/vdev.c | 2 +- drivers/bus/vdev/vdev_params.c | 10 +++++++--- drivers/bus/vdev/vdev_private.h | 2 +- drivers/bus/vmbus/vmbus_common.c | 2 +- drivers/dma/idxd/idxd_bus.c | 4 ++-- drivers/net/bonding/rte_eth_bond_args.c | 15 +++++---------- drivers/net/vdev_netvsc/vdev_netvsc.c | 8 ++++++-- drivers/raw/ifpga/ifpga_rawdev.c | 6 +++++- lib/eal/common/eal_common_bus.c | 10 +++++++--- lib/eal/common/eal_common_dev.c | 18 +++++++++++++----- lib/eal/common/hotplug_mp.c | 12 ++++++++++-- lib/eal/include/bus_driver.h | 2 +- lib/eal/include/rte_dev.h | 15 ++++++++++----- lib/eal/linux/eal_dev.c | 6 +++++- 27 files changed, 156 insertions(+), 70 deletions(-) diff --git a/app/test/test_devargs.c b/app/test/test_devargs.c index e510f0491e..b8da46728d 100644 --- a/app/test/test_devargs.c +++ b/app/test/test_devargs.c @@ -333,7 +333,12 @@ test_pci(struct rte_bus *pci_bus, const char *dev_name, const char *name2) pci_dev->bus = pci_bus; - if (rte_cmp_dev_name(pci_dev, name2) != 0) { + struct rte_bus_address addr = { + .addr = name2, + .size = strlen(name2) + }; + + if (rte_cmp_dev_name(pci_dev, &addr) != 0) { printf("rte_cmp_dev_name(%s, %s) device name (%s) not expected (%s)\n", pci_dev->name, name2, pci_dev->name, name2); return -1; @@ -350,20 +355,30 @@ test_vdev(struct rte_bus *vdev_bus, const char *dev_name, const char *name2) return -1; } - struct rte_device *vdev_dev = vdev_bus->find_device(NULL, rte_cmp_dev_name, dev_name); + struct rte_bus_address dev_addr = { + .addr = dev_name, + .size = strlen(dev_name) + }; + + struct rte_device *vdev_dev = vdev_bus->find_device(NULL, rte_cmp_dev_name, &dev_addr); if (vdev_dev == NULL) { printf("Cannot find %s vdev\n", dev_name); rte_vdev_uninit(dev_name); return -1; } - int ret = rte_cmp_dev_name(vdev_dev, name2); + + struct rte_bus_address dev_addr2 = { + .addr = name2, + .size = strlen(name2) + }; + int ret = rte_cmp_dev_name(vdev_dev, &dev_addr2); if (ret != 0) { printf("rte_cmp_dev_name(%s, %s) device name (%s) not expected (%s)\n", vdev_dev->name, name2, vdev_dev->name, name2); return -1; } - if (vdev_dev != vdev_bus->find_device(NULL, rte_cmp_dev_name, name2)) { + if (vdev_dev != vdev_bus->find_device(NULL, rte_cmp_dev_name, &dev_addr2)) { printf("rte_cmp_dev_name(%s, %s) device name (%s) not expected (%s)\n", vdev_dev->name, name2, vdev_dev->name, name2); return -1; diff --git a/app/test/test_vdev.c b/app/test/test_vdev.c index 860fa260af..568c16593e 100644 --- a/app/test/test_vdev.c +++ b/app/test/test_vdev.c @@ -21,9 +21,9 @@ static const char * const valid_keys[] = { }; static int -cmp_dev_match(const struct rte_device *dev, const void *_kvlist) +cmp_dev_match(const struct rte_device *dev, const struct rte_bus_address *_kvlist) { - const struct rte_kvargs *kvlist = _kvlist; + const struct rte_kvargs *kvlist = _kvlist->addr; const char *key = TEST_VDEV_KEY_NAME; const char *name; @@ -54,7 +54,11 @@ get_matching_vdev(const char *match_str) } } - dev = vdev_bus->find_device(NULL, cmp_dev_match, kvargs); + struct rte_bus_address dev_addr = { + .addr = kvargs, + .size = sizeof(struct rte_kvargs), + }; + dev = vdev_bus->find_device(NULL, cmp_dev_match, &dev_addr); rte_kvargs_free(kvargs); return dev; @@ -76,7 +80,12 @@ test_vdev_bus(void) printf("Failed to create vdev net_null_test0\n"); goto fail; } - dev0 = vdev_bus->find_device(NULL, rte_cmp_dev_name, "net_null_test0"); + + struct rte_bus_address dev0_addr = { + .addr = "net_null_test0", + .size = strlen("net_null_test0") + }; + dev0 = vdev_bus->find_device(NULL, rte_cmp_dev_name, &dev0_addr); if (dev0 == NULL) { printf("Cannot find net_null_test0 vdev\n"); goto fail; @@ -87,7 +96,11 @@ test_vdev_bus(void) printf("Failed to create vdev net_null_test1\n"); goto fail; } - dev1 = vdev_bus->find_device(NULL, rte_cmp_dev_name, "net_null_test1"); + struct rte_bus_address dev1_addr = { + .addr = "net_null_test1", + .size = strlen("net_null_test1") + }; + dev1 = vdev_bus->find_device(NULL, rte_cmp_dev_name, &dev1_addr); if (dev1 == NULL) { printf("Cannot find net_null_test1 vdev\n"); goto fail; diff --git a/drivers/bus/auxiliary/auxiliary_common.c b/drivers/bus/auxiliary/auxiliary_common.c index f8a064a400..4369c85547 100644 --- a/drivers/bus/auxiliary/auxiliary_common.c +++ b/drivers/bus/auxiliary/auxiliary_common.c @@ -300,7 +300,7 @@ rte_auxiliary_remove_device(struct rte_auxiliary_device *auxiliary_dev) static struct rte_device * auxiliary_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) + const struct rte_bus_address *data) { const struct rte_auxiliary_device *pstart; struct rte_auxiliary_device *adev; diff --git a/drivers/bus/auxiliary/auxiliary_params.c b/drivers/bus/auxiliary/auxiliary_params.c index e4c7ee0c3b..93f0bd46be 100644 --- a/drivers/bus/auxiliary/auxiliary_params.c +++ b/drivers/bus/auxiliary/auxiliary_params.c @@ -22,9 +22,9 @@ static const char * const auxiliary_params_keys[] = { static int auxiliary_dev_match(const struct rte_device *dev, - const void *_kvlist) + const struct rte_bus_address *_kvlist) { - const struct rte_kvargs *kvlist = _kvlist; + const struct rte_kvargs *kvlist = _kvlist->addr; const char *key = auxiliary_params_keys[RTE_AUXILIARY_PARAM_NAME]; const char *name; @@ -59,7 +59,11 @@ auxiliary_dev_iterate(const void *start, } } find_device = auxiliary_bus.bus.find_device; - dev = find_device(start, auxiliary_dev_match, kvargs); + struct rte_bus_address dev_addr = { + .addr = kvargs, + .size = sizeof(struct rte_kvargs), + }; + dev = find_device(start, auxiliary_dev_match, &dev_addr); rte_kvargs_free(kvargs); return dev; } diff --git a/drivers/bus/cdx/cdx.c b/drivers/bus/cdx/cdx.c index 85a50ff476..ba68ac4a8c 100644 --- a/drivers/bus/cdx/cdx.c +++ b/drivers/bus/cdx/cdx.c @@ -500,7 +500,7 @@ rte_cdx_unregister(struct rte_cdx_driver *driver) static struct rte_device * cdx_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) + const struct rte_bus_address *data) { const struct rte_cdx_device *cdx_start; struct rte_cdx_device *cdx_dev; @@ -613,9 +613,9 @@ cdx_get_iommu_class(void) static int cdx_dev_match(const struct rte_device *dev, - const void *_kvlist) + const struct rte_bus_address *_kvlist) { - const struct rte_kvargs *kvlist = _kvlist; + const struct rte_kvargs *kvlist = _kvlist->addr; const char *key = cdx_params_keys[RTE_CDX_PARAM_NAME]; const char *name; @@ -649,7 +649,11 @@ cdx_dev_iterate(const void *start, } } find_device = rte_cdx_bus.bus.find_device; - dev = find_device(start, cdx_dev_match, kvargs); + struct rte_bus_address dev_addr = { + .addr = kvargs, + .size = sizeof(struct rte_kvargs), + }; + dev = find_device(start, cdx_dev_match, &dev_addr); rte_kvargs_free(kvargs); return dev; } diff --git a/drivers/bus/dpaa/dpaa_bus.c b/drivers/bus/dpaa/dpaa_bus.c index 8526bc258d..e0ea5426dd 100644 --- a/drivers/bus/dpaa/dpaa_bus.c +++ b/drivers/bus/dpaa/dpaa_bus.c @@ -745,7 +745,7 @@ rte_dpaa_bus_probe(void) static struct rte_device * rte_dpaa_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) + const struct rte_bus_address *data) { struct rte_dpaa_device *dev; const struct rte_dpaa_device *dstart; diff --git a/drivers/bus/fslmc/fslmc_bus.c b/drivers/bus/fslmc/fslmc_bus.c index 2cd666c218..4dc1465749 100644 --- a/drivers/bus/fslmc/fslmc_bus.c +++ b/drivers/bus/fslmc/fslmc_bus.c @@ -497,7 +497,7 @@ rte_fslmc_probe(void) static struct rte_device * rte_fslmc_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) + const struct rte_bus_address *data) { const struct rte_dpaa2_device *dstart; struct rte_dpaa2_device *dev; diff --git a/drivers/bus/ifpga/ifpga_bus.c b/drivers/bus/ifpga/ifpga_bus.c index 87884401c3..5881b4986a 100644 --- a/drivers/bus/ifpga/ifpga_bus.c +++ b/drivers/bus/ifpga/ifpga_bus.c @@ -443,7 +443,7 @@ ifpga_unplug(struct rte_device *dev) static struct rte_device * ifpga_find_device(const struct rte_device *start, - rte_dev_cmp_t cmp, const void *data) + rte_dev_cmp_t cmp, const struct rte_bus_address *data) { struct rte_afu_device *afu_dev; diff --git a/drivers/bus/pci/pci_common.c b/drivers/bus/pci/pci_common.c index 0e3d1dcc46..aa2a7efd01 100644 --- a/drivers/bus/pci/pci_common.c +++ b/drivers/bus/pci/pci_common.c @@ -540,7 +540,7 @@ rte_pci_remove_device(struct rte_pci_device *pci_dev) static struct rte_device * pci_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) + const struct rte_bus_address *data) { const struct rte_pci_device *pstart; struct rte_pci_device *pdev; diff --git a/drivers/bus/pci/pci_params.c b/drivers/bus/pci/pci_params.c index 087ec38bb9..de7ea8f2f8 100644 --- a/drivers/bus/pci/pci_params.c +++ b/drivers/bus/pci/pci_params.c @@ -41,9 +41,9 @@ pci_addr_kv_cmp(const char *key __rte_unused, static int pci_dev_match(const struct rte_device *dev, - const void *_kvlist) + const struct rte_bus_address *_kvlist) { - const struct rte_kvargs *kvlist = _kvlist; + const struct rte_kvargs *kvlist = _kvlist->addr; const struct rte_pci_device *pdev; if (kvlist == NULL) @@ -76,7 +76,11 @@ rte_pci_dev_iterate(const void *start, } } find_device = rte_pci_bus.bus.find_device; - dev = find_device(start, pci_dev_match, kvargs); + struct rte_bus_address dev_addr = { + .addr = kvargs, + .size = sizeof(struct rte_kvargs), + }; + dev = find_device(start, pci_dev_match, &dev_addr); rte_kvargs_free(kvargs); return dev; } diff --git a/drivers/bus/platform/platform.c b/drivers/bus/platform/platform.c index e6ab8b7ea1..c34b725c26 100644 --- a/drivers/bus/platform/platform.c +++ b/drivers/bus/platform/platform.c @@ -473,7 +473,8 @@ platform_bus_probe(void) } static struct rte_device * -platform_bus_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, const void *data) +platform_bus_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, + const struct rte_bus_address *data) { struct rte_platform_device *pdev; diff --git a/drivers/bus/platform/platform_params.c b/drivers/bus/platform/platform_params.c index 8a6214b97c..00f6774c8c 100644 --- a/drivers/bus/platform/platform_params.c +++ b/drivers/bus/platform/platform_params.c @@ -27,10 +27,10 @@ static const char * const platform_params_keys[] = { }; static int -platform_dev_match(const struct rte_device *dev, const void *_kvlist) +platform_dev_match(const struct rte_device *dev, const struct rte_bus_address *_kvlist) { const char *key = platform_params_keys[RTE_PLATFORM_PARAM_NAME]; - const struct rte_kvargs *kvlist = _kvlist; + const struct rte_kvargs *kvlist = _kvlist->addr; const char *name; /* no kvlist arg, all devices match */ @@ -68,7 +68,11 @@ platform_bus_dev_iterate(const void *start, const char *str, return NULL; } - dev = platform_bus.bus.find_device(start, platform_dev_match, kvargs); + struct rte_bus_address dev_addr = { + .addr = kvargs, + .size = sizeof(struct rte_kvargs), + }; + dev = platform_bus.bus.find_device(start, platform_dev_match, &dev_addr); rte_kvargs_free(kvargs); return dev; diff --git a/drivers/bus/uacce/uacce.c b/drivers/bus/uacce/uacce.c index 0e2215c16a..ad13657927 100644 --- a/drivers/bus/uacce/uacce.c +++ b/drivers/bus/uacce/uacce.c @@ -508,7 +508,8 @@ uacce_unplug(struct rte_device *dev) } static struct rte_device * -uacce_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, const void *data) +uacce_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, + const struct rte_bus_address *data) { const struct rte_uacce_device *uacce_start; struct rte_uacce_device *uacce_dev; @@ -549,10 +550,10 @@ uacce_parse(const char *name, void *addr, int addr_size, int *out_size) } static int -uacce_dev_match(const struct rte_device *dev, const void *_kvlist) +uacce_dev_match(const struct rte_device *dev, const struct rte_bus_address *_kvlist) { const char *key = uacce_params_keys[RTE_UACCE_PARAM_NAME]; - const struct rte_kvargs *kvlist = _kvlist; + const struct rte_kvargs *kvlist = _kvlist->addr; const char *name; /* no kvlist arg, all devices match. */ @@ -583,7 +584,11 @@ uacce_dev_iterate(const void *start, const char *str, } } find_device = uacce_bus.bus.find_device; - dev = find_device(start, uacce_dev_match, kvargs); + struct rte_bus_address dev_addr = { + .addr = kvargs, + .size = sizeof(struct rte_kvargs), + }; + dev = find_device(start, uacce_dev_match, &dev_addr); rte_kvargs_free(kvargs); return dev; } diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index f369720cb1..13a387428d 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -621,7 +621,7 @@ vdev_cleanup(void) struct rte_device * rte_vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) + const struct rte_bus_address *data) { const struct rte_vdev_device *vstart; struct rte_vdev_device *dev; diff --git a/drivers/bus/vdev/vdev_params.c b/drivers/bus/vdev/vdev_params.c index 68ae09e2e9..7197c0f350 100644 --- a/drivers/bus/vdev/vdev_params.c +++ b/drivers/bus/vdev/vdev_params.c @@ -24,9 +24,9 @@ static const char * const vdev_params_keys[] = { static int vdev_dev_match(const struct rte_device *dev, - const void *_kvlist) + const struct rte_bus_address *_kvlist) { - const struct rte_kvargs *kvlist = _kvlist; + const struct rte_kvargs *kvlist = _kvlist->addr; const char *key = vdev_params_keys[RTE_VDEV_PARAM_NAME]; const char *name; @@ -58,7 +58,11 @@ rte_vdev_dev_iterate(const void *start, return NULL; } } - dev = rte_vdev_find_device(start, vdev_dev_match, kvargs); + struct rte_bus_address dev_addr = { + .addr = kvargs, + .size = sizeof(struct rte_kvargs), + }; + dev = rte_vdev_find_device(start, vdev_dev_match, &dev_addr); rte_kvargs_free(kvargs); return dev; } diff --git a/drivers/bus/vdev/vdev_private.h b/drivers/bus/vdev/vdev_private.h index e683f5f133..ef15266b16 100644 --- a/drivers/bus/vdev/vdev_private.h +++ b/drivers/bus/vdev/vdev_private.h @@ -14,7 +14,7 @@ extern "C" { struct rte_device * rte_vdev_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data); + const struct rte_bus_address *data); void * rte_vdev_dev_iterate(const void *start, diff --git a/drivers/bus/vmbus/vmbus_common.c b/drivers/bus/vmbus/vmbus_common.c index ca69a5712d..3d8ef8c456 100644 --- a/drivers/bus/vmbus/vmbus_common.c +++ b/drivers/bus/vmbus/vmbus_common.c @@ -323,7 +323,7 @@ vmbus_remove_device(struct rte_vmbus_device *vmbus_dev) /* VMBUS doesn't support hotplug */ static struct rte_device * vmbus_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) + const struct rte_bus_address *data) { struct rte_vmbus_device *dev; diff --git a/drivers/dma/idxd/idxd_bus.c b/drivers/dma/idxd/idxd_bus.c index 350e4a44c1..bbb4152fb9 100644 --- a/drivers/dma/idxd/idxd_bus.c +++ b/drivers/dma/idxd/idxd_bus.c @@ -45,7 +45,7 @@ struct dsa_bus; static int dsa_scan(void); static int dsa_probe(void); static struct rte_device *dsa_find_device(const struct rte_device *start, - rte_dev_cmp_t cmp, const void *data); + rte_dev_cmp_t cmp, const struct rte_bus_address *data); static enum rte_iova_mode dsa_get_iommu_class(void); static int dsa_addr_parse(const char *name, void *addr, int addr_size, int *out_size); @@ -366,7 +366,7 @@ dsa_scan(void) static struct rte_device * dsa_find_device(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data) + const struct rte_bus_address *data) { struct rte_dsa_device *dev = TAILQ_FIRST(&dsa_bus.device_list); diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index bdec5d61d4..2ef42db796 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -23,15 +23,6 @@ const char *pmd_bond_init_valid_arguments[] = { NULL }; -static inline int -bond_pci_addr_cmp(const struct rte_device *dev, const void *_pci_addr) -{ - const struct rte_pci_device *pdev = RTE_DEV_TO_PCI_CONST(dev); - const struct rte_pci_addr *paddr = _pci_addr; - - return rte_pci_addr_cmp(&pdev->addr, paddr); -} - static inline int find_port_id_by_pci_addr(const struct rte_pci_addr *pci_addr) { @@ -45,7 +36,11 @@ find_port_id_by_pci_addr(const struct rte_pci_addr *pci_addr) return -1; } - dev = pci_bus->find_device(NULL, bond_pci_addr_cmp, pci_addr); + struct rte_bus_address dev_addr = { + .addr = pci_addr, + .size = PCI_PRI_STR_SIZE + }; + dev = pci_bus->find_device(NULL, rte_cmp_dev_name, &dev_addr); if (dev == NULL) { RTE_BOND_LOG(ERR, "unable to find PCI device"); return -1; diff --git a/drivers/net/vdev_netvsc/vdev_netvsc.c b/drivers/net/vdev_netvsc/vdev_netvsc.c index f4a84783ce..020b703906 100644 --- a/drivers/net/vdev_netvsc/vdev_netvsc.c +++ b/drivers/net/vdev_netvsc/vdev_netvsc.c @@ -771,7 +771,7 @@ RTE_PMD_REGISTER_PARAM_STRING(net_vdev_netvsc, /** Compare function for vdev find device operation. */ static int vdev_netvsc_cmp_rte_device(const struct rte_device *dev1, - __rte_unused const void *_dev2) + __rte_unused const struct rte_bus_address *_dev2) { return strncmp(dev1->devargs->name, VDEV_NETVSC_DRIVER_NAME, VDEV_NETVSC_DRIVER_NAME_LEN); @@ -794,8 +794,12 @@ vdev_netvsc_scan_callback(__rte_unused void *arg) VDEV_NETVSC_DRIVER_NAME_LEN)) return; + struct rte_bus_address dev_addr = { + .addr = VDEV_NETVSC_DRIVER_NAME, + .size = VDEV_NETVSC_DRIVER_NAME_LEN, + }; dev = vbus->find_device(NULL, vdev_netvsc_cmp_rte_device, - VDEV_NETVSC_DRIVER_NAME); + &dev_addr); if (dev) return; if (rte_devargs_add(RTE_DEVTYPE_VIRTUAL, VDEV_NETVSC_DRIVER_NAME)) diff --git a/drivers/raw/ifpga/ifpga_rawdev.c b/drivers/raw/ifpga/ifpga_rawdev.c index 7238246e1c..9a081fd5d8 100644 --- a/drivers/raw/ifpga/ifpga_rawdev.c +++ b/drivers/raw/ifpga/ifpga_rawdev.c @@ -1868,7 +1868,11 @@ ifpga_cfg_remove(struct rte_vdev_device *vdev) args.port, args.bdf); bus = rte_bus_find_by_name(RTE_STR(IFPGA_BUS_NAME)); if (bus) { - if (bus->find_device(NULL, rte_cmp_dev_name, dev_name)) { + struct rte_bus_address dev_addr = { + .addr = dev_name, + .size = RTE_RAWDEV_NAME_MAX_LEN + }; + if (bus->find_device(NULL, rte_cmp_dev_name, &dev_addr)) { ret = rte_eal_hotplug_remove(RTE_STR(IFPGA_BUS_NAME), dev_name); } diff --git a/lib/eal/common/eal_common_bus.c b/lib/eal/common/eal_common_bus.c index fc986570d6..43410239a5 100644 --- a/lib/eal/common/eal_common_bus.c +++ b/lib/eal/common/eal_common_bus.c @@ -159,9 +159,9 @@ rte_bus_find(const struct rte_bus *start, rte_bus_cmp_t cmp, } static int -cmp_rte_device(const struct rte_device *dev1, const void *_dev2) +cmp_rte_device(const struct rte_device *dev1, const struct rte_bus_address *_dev2) { - const struct rte_device *dev2 = _dev2; + const struct rte_device *dev2 = _dev2->addr; return dev1 != dev2; } @@ -171,7 +171,11 @@ bus_find_device(const struct rte_bus *bus, const void *_dev) { struct rte_device *dev; - dev = bus->find_device(NULL, cmp_rte_device, _dev); + struct rte_bus_address dev_addr = { + .addr = _dev, + .size = 0, + }; + dev = bus->find_device(NULL, cmp_rte_device, &dev_addr); return dev == NULL; } diff --git a/lib/eal/common/eal_common_dev.c b/lib/eal/common/eal_common_dev.c index b0a4739d5d..e067c24358 100644 --- a/lib/eal/common/eal_common_dev.c +++ b/lib/eal/common/eal_common_dev.c @@ -108,7 +108,7 @@ struct dev_next_ctx { (((struct dev_next_ctx *)(intptr_t)ptr)->cls_str) int -rte_cmp_dev_name(const struct rte_device *dev1, const void *name2) +rte_cmp_dev_name(const struct rte_device *dev1, const struct rte_bus_address *dev2_addr) { void *parsed_name1; void *parsed_name2; @@ -117,7 +117,7 @@ rte_cmp_dev_name(const struct rte_device *dev1, const void *name2) int ret; if (dev1->bus->parse(dev1->name, NULL, 0, &size1) != 0 || - dev1->bus->parse(name2, NULL, 0, &size2) != 0) + dev1->bus->parse(dev2_addr->addr, NULL, 0, &size2) != 0) return 1; if (size1 != size2) @@ -137,7 +137,7 @@ rte_cmp_dev_name(const struct rte_device *dev1, const void *name2) memset(parsed_name2, 0, size2); dev1->bus->parse(dev1->name, parsed_name1, size1, NULL); - dev1->bus->parse(name2, parsed_name2, size2, NULL); + dev1->bus->parse(dev2_addr->addr, parsed_name2, size2, NULL); ret = memcmp(parsed_name1, parsed_name2, size1); free(parsed_name1); @@ -228,7 +228,11 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev) if (ret) goto err_devarg; - dev = da->bus->find_device(NULL, rte_cmp_dev_name, da->name); + struct rte_bus_address dev_addr = { + .addr = da->name, + .size = RTE_DEV_NAME_MAX_LEN + }; + dev = da->bus->find_device(NULL, rte_cmp_dev_name, &dev_addr); if (dev == NULL) { EAL_LOG(ERR, "Cannot find device (%s)", da->name); @@ -366,7 +370,11 @@ rte_eal_hotplug_remove(const char *busname, const char *devname) return -ENOENT; } - dev = bus->find_device(NULL, rte_cmp_dev_name, devname); + struct rte_bus_address dev_addr = { + .addr = devname, + .size = strlen(devname) + }; + dev = bus->find_device(NULL, rte_cmp_dev_name, &dev_addr); if (dev == NULL) { EAL_LOG(ERR, "Cannot find plugged device (%s)", devname); return -EINVAL; diff --git a/lib/eal/common/hotplug_mp.c b/lib/eal/common/hotplug_mp.c index a2623c96c3..f4cce7c2e5 100644 --- a/lib/eal/common/hotplug_mp.c +++ b/lib/eal/common/hotplug_mp.c @@ -128,7 +128,11 @@ __handle_secondary_request(void *param) goto finish; } - dev = bus->find_device(NULL, rte_cmp_dev_name, da.name); + struct rte_bus_address dev_addr = { + .addr = da.name, + .size = RTE_DEV_NAME_MAX_LEN + }; + dev = bus->find_device(NULL, rte_cmp_dev_name, &dev_addr); if (dev == NULL) { EAL_LOG(ERR, "Cannot find plugged device (%s)", da.name); ret = -ENOENT; @@ -255,7 +259,11 @@ static void __handle_primary_request(void *param) goto quit; } - dev = bus->find_device(NULL, rte_cmp_dev_name, da->name); + struct rte_bus_address dev_addr = { + .addr = da->name, + .size = RTE_DEV_NAME_MAX_LEN + }; + dev = bus->find_device(NULL, rte_cmp_dev_name, &dev_addr); if (dev == NULL) { EAL_LOG(ERR, "Cannot find plugged device (%s)", da->name); ret = -ENOENT; diff --git a/lib/eal/include/bus_driver.h b/lib/eal/include/bus_driver.h index 5a3e01b07d..b9c23c0e5b 100644 --- a/lib/eal/include/bus_driver.h +++ b/lib/eal/include/bus_driver.h @@ -70,7 +70,7 @@ typedef int (*rte_bus_probe_t)(void); */ typedef struct rte_device * (*rte_bus_find_device_t)(const struct rte_device *start, rte_dev_cmp_t cmp, - const void *data); + const struct rte_bus_address *data); /** * Implementation specific probe function which is responsible for linking diff --git a/lib/eal/include/rte_dev.h b/lib/eal/include/rte_dev.h index 2df8143af1..47a6c22b53 100644 --- a/lib/eal/include/rte_dev.h +++ b/lib/eal/include/rte_dev.h @@ -171,19 +171,24 @@ int rte_dev_is_probed(const struct rte_device *dev); int rte_eal_hotplug_add(const char *busname, const char *devname, const char *drvargs); +struct rte_bus_address { + const void *addr; + size_t size; +}; + /** * General device name comparison. Will compare by using the specific bus * compare function or by comparing the names directly. * * @param dev * Device handle. - * @param name - * Name to compare against. + * @param addr + * Address to compare against. * @return - * 0 if the device matches the name. Nonzero otherwise. + * 0 if the device matches the address. Nonzero otherwise. */ __rte_internal -int rte_cmp_dev_name(const struct rte_device *dev, const void *name); +int rte_cmp_dev_name(const struct rte_device *dev, const struct rte_bus_address *addr); /** * Add matching devices. @@ -245,7 +250,7 @@ int rte_dev_remove(struct rte_device *dev); * <0 if ordering is possible and the device is lower than the data. * >0 if ordering is possible and the device is greater than the data. */ -typedef int (*rte_dev_cmp_t)(const struct rte_device *dev, const void *data); +typedef int (*rte_dev_cmp_t)(const struct rte_device *dev, const struct rte_bus_address *data); #define RTE_PMD_EXPORT_NAME_ARRAY(n, idx) n##idx[] diff --git a/lib/eal/linux/eal_dev.c b/lib/eal/linux/eal_dev.c index 3b68cda87f..22c126278b 100644 --- a/lib/eal/linux/eal_dev.c +++ b/lib/eal/linux/eal_dev.c @@ -272,8 +272,12 @@ dev_uev_handler(__rte_unused void *param) goto failure_handle_err; } + const struct rte_bus_address dev_addr = { + .addr = uevent.devname, + .size = strlen(uevent.devname) + }; dev = bus->find_device(NULL, rte_cmp_dev_name, - uevent.devname); + &dev_addr); if (dev == NULL) { EAL_LOG(ERR, "Cannot find device (%s) on " "bus (%s)", uevent.devname, busname);