From patchwork Fri Apr 19 03:12:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 139516 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 5DB4243EA9; Fri, 19 Apr 2024 05:13:00 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2F239402D8; Fri, 19 Apr 2024 05:12:55 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2114.outbound.protection.outlook.com [40.107.212.114]) by mails.dpdk.org (Postfix) with ESMTP id 5EF484027D; Fri, 19 Apr 2024 05:12:52 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BIR/TXsM7kFeZoNQfpRQ+UomcJdpQMbo3qtYNxbQXRnskpld8bbZSBXAJrEeA/gqSXi1FdLb7IsuYW07ReL6XfmRlLCvY6zZKBEdsqVqXsh+JKL98FmD1ofkT+jzB3ywQmW6lWhcNNUvSXJGT5FIJ/yxnWlqwuSGIwY46TyB4I+0yGXINN/LiejXJfz8ZQon+ieWJEBuL60erbG11IH/djJfw5hERhm5bL1QSlSZDKrkZz55YxjgUr9eHagNWXwTgXtV55MK6so0Br54qgI6+8O/ts9ion1Lw1P8BQoJn3m97GM1DaiMCIPc+zyW/2XVfpcZnYdDEmwh++SNPtrz6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=xezgCZBF0qLHcaebuMnGFAdPaFEa6gYY0ZnSvkuua/k=; b=RQIWMnfk+VEPFaUi5NgCfczcDtVacU1ub677/vl2QyduqQ4RvXJEFpqR9BLITisM+ObUHQ5/iB7DjOYzAE9UURVFeANziTz12Y2H34jo/9aTub/gZLli8v57t9Vf2ksdTh3iUrGyV/YlgCViF1otuxuSBJBm0qNuwp3H8KbfIcCXgsnnKeGDwgjBpRXTO+Eb3xPADH1O9ItIYJWsu4lZVOFzoL8buxa874fd2fLn62Hb7NK73zjC8pitJuxpuTCoTnMmvhOsBwTVme+DrrzF7O5hhE1PgXjCU27zkvEkfW3SjSJfZxFmKq02qOzC45P1aRr7aSMMjrqbmao4a2BQcw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xezgCZBF0qLHcaebuMnGFAdPaFEa6gYY0ZnSvkuua/k=; b=Z1RBTPJ2tzuUI+OLYCatKeEld5Xyqy5FP1y9OfrMuYtWb0c16UNsUlmlf20sfA5jn3HpWs8Wei4KPgfHT0wV1zk/ye5xEJqzk0MdLKZJJzXiEymTaGfeDx75AQdyUfT0uOUNIp0y9uWcDxQkU5V2OYVK7c7bsPBKCuV05kW1yu8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by IA2PR13MB6587.namprd13.prod.outlook.com (2603:10b6:208:4ab::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.43; Fri, 19 Apr 2024 03:12:50 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024 03:12:50 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , stable@dpdk.org, Long Wu , Peng Zhang Subject: [PATCH 1/8] net/nfp: fix resource leak of secondary process Date: Fri, 19 Apr 2024 11:12:19 +0800 Message-Id: <20240419031226.1191069-2-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240419031226.1191069-1-chaoyong.he@corigine.com> References: <20240419031226.1191069-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0044.apcprd01.prod.exchangelabs.com (2603:1096:4:193::8) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|IA2PR13MB6587:EE_ X-MS-Office365-Filtering-Correlation-Id: c98c8ff4-cb69-48b3-e1d2-08dc601e9870 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: edqMlsSxmp9yAvjdaYuIbxD0hnpPXcgV8k10X2weeWBoFke0brwGRn1D4xR3MVfw5Spt55iK2sdEY++rT0gY/Bd11xIkv6lvjmUVH+X1PcHGdu7WP/vUZ7/f0UNKZXzlgqgqZveHWtV0AtKoxR/c9rdbqFN5qgFPL5dpOTss2KMbGYZZRP+HFl+ocsS5ZDlrm5eci307q6BwKSbgI398xgFzM+zS/cahZIxYCS2OaiHK3RwgzyemmkRjHm+0cJQG4rWDq5J1FdhBTQM81niMHkyZ1pCps6SQwX9CVnjhIvsBFyeDvN2xfDuDBLJvUUBN1mwN8nzjfxrTqNf16O3bf8M+fhpqPRe3WK/MDw+uWqelY/DdFDGghQrEuJG2e6BVBKjs4oI/3m7A4IHObvidgAjcyqcm2E334zRxYHmFs7GVvcz09YHPj/0W1ds0ckZbUNb8+W8YLfGWiV72/7+6S+I6gfLLNgWFH/op3BuAXo0/suHKsTKgCqT27uYLtq8wMOJHXm3Mc6kEBmOaL/64YkRCBZNyqpyoOF9NxYXUZpq/PMef8Q2L7KQDVccb7WZlKGUgHxSsfJ+PU09KvGp5tT+gUDYwS6nSIirA7KyCp7MQSCYwz0QVzmcHc0w/2XtMTenCb9qV/sZTvXd12yrpU0i9v6Se2a2UeyeHSOTsnbVzo13zjNi+6jEgv+iK916vEDtxXHpoaRS3v3ZNTpPFD7oh8OZo3DqLap/lxgMpS031eEoU1q6YXho8A57P9WyDmdLNmhRhnaci2LSLa1UidwxFl50wB4o480w6CvVVn1b+zMScIzjYFYFBq6ICt/hr2ChJRadHpjWaMxy8Q2h03bnikjRlHhptrtN7Zd0dLnn5r1HQLNZi+QEM2HxRFg2wjWx6oYcYccYFMGkOFUga/puNA/3mgwQLu6ZNrUG4dBP1AqcO2Ws8RMZ0L1TSHiLx2o6Ksx647D7LPmb0THPaGzjvJWx5sZJFBt9cArdRSbJh1weYHNiiVw9ogjHlQgAC7h+tnTxbdkdm4WhefEhLtkXpCTY8KoE0iOYxk7xpDtZx9ibIo7x2GUtHpJjRTLwWAAwgR99t3MxtzcjJsfDtBXl+LqgF/5U9xlHGf515INIgTjr6Q7QwTxLkUsIUHoeD9+yIDnUU2WfM+9N8KjyX+iWHF5p4Ra4TxucT9fZJHACfK+sQHQDMC0INUEdbjMyG/wrjmTojbxR3gbiPIEf+3NIKwHj18uVXCVdCUMJmPEZZxfPzNyrfxQ1SNGMbFkT4CJ2YCZoWMEjZDGHssmSv5JQaBfn52ALKuKAnUbswzrs5iq4m7itie5IAWTmpUx5uiXwLsRHB05xH5W84gVD+hA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(1800799015)(52116005)(376005)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oc0Wwy/EBbxJy22plsWxdZ9t5lgMaxJTqwT1SdERx0wDsgrfxwzpndfVfzLpp+wXyES0bE1JFEYWQuU03uB8bAHzBP9UOvvBTkpZhYzY2CWNGWY3nClnRsOHOl22lqL9neTKrcx6dMUwbID9Am3TnN9PqX1auX3rqkeOTfy/s2hr6sF5HYfO7T2zuacq0Cq6/KYRDEijrjI7xhnoxvr2JGAEr5GUxJh++P8/GKTgV37e1YfIczyfRB/24zzlIy6ufNKlfV1rhu8YoP5CV2tpZg08XUC8esqSVgtVuKKZp2A3zkUgFPUrLm51irWxC4wLoUJhFfostx9+XQ/TOyupNlC4+7qqfzymejqEcgfy1nw9UP87v3gGlz2rUZTuJ5WzICymmsfiCIKGBXYewDHLIUgHuK8NqI8zhK3kBpsUWTWn6HovVqImTY5lqlBY74gQwxLdW1t5MTErXlag8M2Q6aaiP3oLaxV1CweLwqj4nwtLqBNTQARrRViGctoDJiuVLzoxfhra07RBttQQ96abN16BJSKrXdGkeI90UT4cJWzS4LMGsElRFUcmwWQm55juXbkwWrK6BrJdOdFvMfJuvT8dD+n+ttlFvArUAtjoUd1EGTwwI2s5N8bF2AbW3hVQ+abfcwJOookISzQQUjE7hDIf6fJoP/FB9qp1Sg9TCl5/gD4JAdIIGkr5fGVZTHVT0DlTw/cAQRo40vDJ09OBnQOfMhRQlUIgWGunzXM3H1BLwzziFpQ7X+0gaFg7ilaUMKLz1hR5jMmIPnj6SE/LPPPVWV5HxSfVjip13mkQZCJyG5A7xMHvPWk0u5agDN+PUdKeD69lPFqiMDtx8XxKMSJ2QNe9BLc7Jkb+VNbzU6Q3CyOmNFdwSxeeENk/tArrsNc3VYY1F3skxvXSFL3SrggnDzJnEVj3yw6TrOQbm+ZaW8QC973ZL4mZ4KCwqJBiJDUYbEkqB3Be7ItUHdjwZZ8aRJfpBXKyk5O6+laSXHMln2wXme7Ua73tEspRYhDeAXcQwwZdWF231BCQ65G5NINag11GiwYf/qROpollUQrpkVfGzpCqe+DojZKSoCIY9PluFkLgIFsqcWz+Np8KW3/Fi8mBufzeTYspWH4ywPEht0J2ct5ggY0pwi5XSYMQMTcMyJrJkAcEwRaivFYTRiHJoH6xnPyn8t356MWkZn4/wW/rV5Q4kT76LXHFDgx5Ob5fXp1mcGcI5eGvz9HTZ+6RQ8+Fl+s4IgVCgKZ9Xgd9odhyNcpDWP+9DL/6GEP0vRAS5Z0U0dOnSXnbiqz0OwY1PxpAiyEZFeKRy+HSMj93FsDq6goAHPW1vTqSSUMdb9RF9GiQbBKohnxrrm7PjLHOMaLXen40lCzOQkuQUx7a2buCquKm7rGjAOxA05bheNHKj1pU0FDluduBjeHy6oLQzcHgsdwsgCzpJxpkUvajm7PxWe0Ibu04kzvCkW9tWXFrksK4t5lGfjyQJiGH6qpVGlzun8Eq76OSHslwBCSGhtxL/QGJURhVbpZLB8ms3KUdH6yj5NJPcl3BVMmHvJzLUHZSTsEC+LTA4KqIH8+uMkM26FBG2pKxE7Uk68+18R1TIrCt6ndubSOffX+ipA== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: c98c8ff4-cb69-48b3-e1d2-08dc601e9870 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 03:12:50.5914 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ytua+THRGAziRgL28m6v9ywljf6GIh3ouOXlDu+nsvNtqhUj2wzaE7LikKcXH4gZJeOJKbzpkEj6t2KuhDC+C4vd4kLZgRGtwpqawwF6J2g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA2PR13MB6587 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 Fix one resource leak problem in the abnormal logic of secondary process. Fixes: 016141b18b3a ("net/nfp: refactor secondary process probe") Cc: stable@dpdk.org Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/nfp_ethdev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index b711e15b9f..98d8e87028 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -2123,7 +2123,7 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) if (sym_tbl == NULL) { PMD_INIT_LOG(ERR, "Something is wrong with the firmware symbol table"); ret = -EIO; - goto sync_free; + goto cpp_cleanup; } /* Read the app ID of the firmware loaded */ @@ -2171,6 +2171,8 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) sym_tbl_cleanup: free(sym_tbl); +cpp_cleanup: + nfp_cpp_free(cpp); sync_free: nfp_sync_free(sync); pf_cleanup: From patchwork Fri Apr 19 03:12:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 139517 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 1F39343EA9; Fri, 19 Apr 2024 05:13:09 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E4C314067B; Fri, 19 Apr 2024 05:12:58 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2093.outbound.protection.outlook.com [40.107.237.93]) by mails.dpdk.org (Postfix) with ESMTP id 0C9C9402E1; Fri, 19 Apr 2024 05:12:56 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZdLKvKCiDMm3G7H7rx2Rr6xDRC6liO+ra8GtplNCBQnGJR67HxeFdC6IvX2X9WFkp1KISyqx0oF1MAcuA/9II6LeAJYCqJkilTLY2SmF11JS7cbGwcDHUmE2tcWLENGuLuFbkooRoy3iqXSaXS+KEbuh79K0rGP415F4/kGaenOyh+ckTBvj6g2psa/xer4tJkzApmpao5fLpH6j5NDwgZWSe9rTHmXeNfsPN5NZQex0ZSF53UEhKxHz0Asj1IYyNvbceZChzKlJJclvz8eeAJPCWQPtMYe8goB4nwYXTzXzLCTkIZMoN3/KtKlq8vVSBv+lMBu9P5idw44lXbJHaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=+XFsOUIpDJOabUFDJrulPSjJb4fVEk763f6hmQD4NNk=; b=chXq48s8qt7Q+FspX7Rd3gLRXc6BblC2WuOBVEI31cHhCWNS1jQWxheys8eKTlkvUkQH3UykV/GH5lOXlc/31jKd31FuoSWABETYlRNqHc04IiPS3E+JqoDtMthVbjK5R9OfeeXWi3S/iXNSElqU/T0FOa10UintAsVdR9v+hxT+vGBDc5Q6+3zxQdvn0zy/uGYaMcx0wv8Za+S4vx7cZCCJ5TZWyGget/5iE98xvNGAJ6nkuDSpasL7v3VyUsezBEgZszSzUDeieUTNSWrbS/aiNHbnJjlgiiSNGF4+TRe5hpHECP3K2gycmNIGNTYImJ4wDAZ5pFSHzXXQTa1IwA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+XFsOUIpDJOabUFDJrulPSjJb4fVEk763f6hmQD4NNk=; b=sTLZWJ3RZv4jSnsAD2a3TKOe9BqxV3wwGL6Vswdg2y6ALplprp8iKASTQs0YZXDsDEcG+YxX4DLqKulPYDh7FS+ZDm+pDuHcM7r7dvWDc9m3AiVrRBw2JGP2GqNm90M9uXM/d8jhllYpl7sGNAJM0x7ANV5sKUR5kLQOBBjxbOY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY1PR13MB6310.namprd13.prod.outlook.com (2603:10b6:a03:52e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.38; Fri, 19 Apr 2024 03:12:53 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024 03:12:52 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , stable@dpdk.org, Long Wu , Peng Zhang Subject: [PATCH 2/8] net/nfp: fix configuration BAR problem Date: Fri, 19 Apr 2024 11:12:20 +0800 Message-Id: <20240419031226.1191069-3-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240419031226.1191069-1-chaoyong.he@corigine.com> References: <20240419031226.1191069-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0044.apcprd01.prod.exchangelabs.com (2603:1096:4:193::8) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY1PR13MB6310:EE_ X-MS-Office365-Filtering-Correlation-Id: 1092ee2f-4874-415d-cbbd-08dc601e99f1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: w89l5aAYJN5Y3EW7u64A1OXXay0Po/VFUXqpTq3bjkcicF/U8CMCF+g7wPtdBS3MelpEPKxcLiDvYnIa3LZk+//JiCtihgIfOgzba9Mr6l7KHotkdWtgTWAi6CsXECR4+qucd3zBisds2smNGDtb9fz0+OIeqL9BYltoaAieeFwXLPs86ODKn2FsLjAXpCDPFYoIjLkQGFYff846SQWLQcLbXS6g1YeAuggpk39Wi9iUc8qUq8SDlH21kbRZMLWKp1bWAxnPjhrcG86wX3LLf3bKXchFYz+bqRxJYK2p1GXmCFKtOhjfYZLW4c1w2jkSGy0mTt77i1royoB8AuRSV45vlY5iFiKoV7S7fZHYbKRGWvl8dCaDLSLNYR94FeqZJmMpzqxZbfjqU/omGsZpoqK6EgmRjIHtUCqS+abVvnDeEmVutmLIJOfHeHsltEbCx9MO/gBdNfrLCn67zJDlzPrZaTdTcteh+UDP/BtOSRiCBOyoF/UPrkXNIof14y8q8Nw5XkOrBelNqPgrPFeHr+STovGpLMrWs/CQPaF88wVEtkZliESyTEstaec874cdqJwYfLfaJVLDzisDcaQnuQ41y9P0DabxNRJXFE3ccOAoIURhNtDjkCAx0Pw7LTDV+/JKvXRt04+hlt87HIhKRQVcvPJvMSR1b4FgwVsGdS+MHP2dQpdMEKBWl1xWbuOvTJYGcmCVEEdSABFNuMVSzC2FUvPYvd25X+CFBjLG2ZnUU7e93V0eik8H+YQfxvyVUkd8alhrTpJjKbhVuz1q7EmYxqjb0XGyUDd2/i4Fn1HkPOIPDxjo7RMaj1MgxWABDJa1W3R7Pw9jY+mU8bHhAB8oHd4sXoV4s/VgIfbDfb1DxfoJCwC2krmvCI5ZxeayPrShRcC+xvEuCQ3xnf9oPkLsFSKoTSibmB2dTd/23N8nT+4VFx1mj1anKkmEppDdQZzlty2R1VHqTId2mVgQW2jpoz9EZetsOD805NTGgEjUYe7AAfLxy89BjenYInqUMrJuJbQCX4Ngbweovk3IuwZkhXJIw926kVc9z5ybyrRpjUrJenmWaA4xmPb8sxxWAOvi/ZAlV2if8emaWX+GsayGi4W6iMcpXJxp0vo8D7ogtxbL1jsFRk9/JLvvx2ecLuxWSdOWLBVTcIak4+qLXNFYAjyKt/PmrIfmBcuHGycvTw3tffSdZZgC1KIBVK/kgXLM2g6XOk9ERbKSDjmJI+ktkH6Ngt9BmQgYxwG7cpbmsrO1KeZjUweXy7Gevg8Q3uIQ2lYfXmPcl335iRpekVUln8Og08+S69luXHLjgg0aaX9rGYg0bxMnepGyia8UmegKfvWnHPr1iG7135Q3dg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(52116005)(376005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: wiwfEJX2I0QKQaQDdvtzTUEA5GoTuGE7fUUmsCGmSEyBHCQVC3qcB8RtpN7azh5aXcuJ4c8KzC+R/+7g+eY91kuhGNtdE79FvU7za7nbsu4NiNDYi9Jdv47ZFaF/tjgl5fXPcMiXtuy8zFQ9hzAkWTY/p/xgsr54g7tx4uJ5sosG7MAs0aUVfgOVPtE/ncp8I/UM2w9SBEUDe/ZBR7jRJwbLW4XbRbkv2ffHY9vQ6lQGzP3fS8WjbR0PCi9Cd0ii4bB/DgB7OOEJUPZ+I/etiX1DmcMc/js3xPM5oPypq5cgOUUb3yBa32zoeAMLtM2y1IjCAHVXrInZk2q2ep+VhN1a8hJaqbC9bxDGXOQ9bTdQWqcVrJvoTQ0kQb7ZA1cG/cePZjqsPbJQpLoczUZv6BlGW5Yuo43sMaGvaW6bUcF+PQ+bsNxySSx5xJo7m8oZZ62ek9/eASHj5wdkXcA6D5rjtROb/mxgxhJNDNFrxUGs5cxUyzNPnkysvN9n5cVxsdc8zqmYCVIEM0Y7fGctNnUEY7WBXzQxuLieqY4CRluIu4L0/Pypq+Yeh1nATPm6VuFq9BWMit+VwZfTKUOAPvxmI+9Ogjwfs7Tqr6gWEUgr+PXRpttPhad592ZFMW2jHcyavmmZ4RiYUpvEmfQGsaKQvePifGqoNxe2sO1UpkIsJv8fRfzL2oEdp/fCcWBwvchptBLExaMTZe5qjCM/PIa0++7YfqMKnZ90B50pRSjZh4FjtIig2CDnCYbAIGZ8XS8f8zkwHfhYlcFZ+cYspltUBw5wyLLHkQSuVW2cyDU5IzaU6ts3ROYHZkR4sCpOM3pIt1GGPQNp6ClbIV9lvkfJmZFQBAiXSp2LLBSzSq1nb59RTXfBWdYNWGlb8GG6/tvXPNSaiFggkv4xuyP8ZVH0JHLlTsrH7PKiUkqfTw0ykYPdHfxx7CzzR/QJtxWZ47D9x4cePHAyHSc2Z1/hy6S2a+fxWSsIS8aa+NLK4iFAfqxM05A+9AWr8e+BIuTuNLJA8u1uotuCfMziwDlE0OU7vQ737YgRf7XUN2Ygkv/n3G/vu3NS1xJ8y9ZuqVD4jIF4lkovUoqpwpMJT/CNCuO1KxpexLRuuqr+0Z5g5S9ICWEoRAXF9oowLxsv1dPfCNY0i8SbGWl31U/lOG3WeJHTExVIz6BFTRlB/0xzAFtaCt62jaSvSYIQYAXsAyl6FY+e2hnt3sP7XTFmYg5hoTo9+0iYT3IscwJbpTZkH3K5zOH4XSHPP90raEsIkMK265AqWjOXib5oAvmy6g7tmWUwRl9TzpOrMTbQDKw9nbRFmKpB6ZduCyI12Xl+HCOtrf2E/H1S9m/+dhOty9kBKYUH66CBaCCqtmKrM8LSe3GqJ3apP2Y+sChgAy+qUNiIEHVaBcYGSB853wLTyJsHztldaRSJcTDVtYfzUjA/pJb0RezEoMVUEZX78J9TRPAHZ3CDVgUdDudiOAHIDAhAF0BvhpAeLH0FhgDqrM+Azk7U2xQutKhHRRdz7jIOWah8Yk6erGaWyjsJy0RexStUpRygUON+svp9rhcgQAr1qfIncJiaKqjqIJ7i2Nqb1fsWlhMqwziN1TP2Sv6ZLFQRuA== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1092ee2f-4874-415d-cbbd-08dc601e99f1 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 03:12:52.9091 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 71tTtzlNF2e0DqHTVwL9gUdIQuyYSc0gVsPO8rwT6lI35nKOfutl/yHIL4ZjxcQcZ1vHekWb5iBGJxu7kioWvQjHc9EvelC6D7BroUolnSw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR13MB6310 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 All the configuration bars are sit in an array, and the initial logic sort all the configuration BAR from small to large based on size and index, which result all valid bars are behind the invalid bars. But the BAR alloc logic search this array from the very beginning and only try limited times (equal to the valid bars number). It's ok for primary process because which has enough valid bars, and finally it can find one to use. But for secondary process and run with igb_uio driver, the valid bars are very limit, and it can not find one, and the logic will fail. Fix this by drop the sort logic, and search the bar array from the end to begin. Fixes: 1fbe51cd9c3a ("net/nfp: extend usage of BAR from 8 to 24") Cc: stable@dpdk.org Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/nfpcore/nfp6000_pcie.c | 34 +++++++++----------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/drivers/net/nfp/nfpcore/nfp6000_pcie.c b/drivers/net/nfp/nfpcore/nfp6000_pcie.c index a6fd89b6c8..ef1ffd6d01 100644 --- a/drivers/net/nfp/nfpcore/nfp6000_pcie.c +++ b/drivers/net/nfp/nfpcore/nfp6000_pcie.c @@ -263,19 +263,6 @@ nfp_bitsize_calc(uint64_t mask) return bit_size; } -static int -nfp_cmp_bars(const void *ptr_a, - const void *ptr_b) -{ - const struct nfp_bar *a = ptr_a; - const struct nfp_bar *b = ptr_b; - - if (a->bitsize == b->bitsize) - return a->index - b->index; - else - return a->bitsize - b->bitsize; -} - static bool nfp_bars_for_secondary(uint32_t index) { @@ -383,9 +370,6 @@ nfp_enable_bars(struct nfp_pcie_user *nfp) if (nfp_bar_write(nfp, bar, barcfg_msix_general) < 0) return -EIO; - /* Sort bars by bit size - use the smallest possible first. */ - qsort(&nfp->bar[0], nfp->bars, sizeof(nfp->bar[0]), nfp_cmp_bars); - return 0; } @@ -466,16 +450,18 @@ find_matching_bar(struct nfp_pcie_user *nfp, int width) { uint32_t n; + uint32_t index; - for (n = 0; n < nfp->bars; n++) { - struct nfp_bar *bar = &nfp->bar[n]; + for (n = RTE_DIM(nfp->bar) ; n > 0; n--) { + index = n - 1; + struct nfp_bar *bar = &nfp->bar[index]; if (bar->lock) continue; if (matching_bar_exist(bar, target, action, token, offset, size, width)) - return n; + return index; } return -1; @@ -493,10 +479,12 @@ find_unused_bar_noblock(struct nfp_pcie_user *nfp, { int ret; uint32_t n; + uint32_t index; const struct nfp_bar *bar; - for (n = 0; n < nfp->bars; n++) { - bar = &nfp->bar[n]; + for (n = RTE_DIM(nfp->bar); n > 0; n--) { + index = n - 1; + bar = &nfp->bar[index]; if (bar->bitsize == 0) continue; @@ -508,7 +496,7 @@ find_unused_bar_noblock(struct nfp_pcie_user *nfp, continue; if (!bar->lock) - return n; + return index; } return -EAGAIN; @@ -561,7 +549,7 @@ nfp_disable_bars(struct nfp_pcie_user *nfp) uint32_t i; struct nfp_bar *bar; - for (i = 0; i < nfp->bars; i++) { + for (i = 0; i < RTE_DIM(nfp->bar); i++) { bar = &nfp->bar[i]; if (bar->iomem != NULL) { bar->iomem = NULL; From patchwork Fri Apr 19 03:12:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 139518 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 4250F43EA9; Fri, 19 Apr 2024 05:13:16 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4C52940687; Fri, 19 Apr 2024 05:13:00 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2093.outbound.protection.outlook.com [40.107.237.93]) by mails.dpdk.org (Postfix) with ESMTP id 63CAE40395 for ; Fri, 19 Apr 2024 05:12:56 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SkMUC5HWVWZ2W5EQcapYzozMpNluPzuYCxN2RaQsCLpSTCeyDUt7wjbWcokckpl4t8OTXPGUXRhZdWfCB5Aqq/BYbJOQmMJwwbK7xBPiBnKZFEH/eYCzfztVplVM6ZPp7ibew5P0kCRmdrtHs3pMAqJQJf36WmZydA7p3/hqZClqjC6EizWsJP7ne7jYcbdoroeTPytHyBXp7ufOTXsBfFlR+w6VL1J4ug6Dhrx+J8f9jW6MGi0RM4HrLDh83S3NcxjaGQHY7GWdrmyD7ZYvD6Z6+vw/wXr9x7wavFkjLRgKhkACRRbdLq8cvmibuduHD7OYkf7SGZ2PAS87C1kGjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=qLrU4LDRZRZFvGKPWtuEx+PpBj+Wc6LuAtSEPf/cUb0=; b=OjW2vQUU7HHeTLWgLM7a6YKXnuEqdNvLTxH+3eIASY/vqmjvQiChLkvf939FysuZEK1RMei6wtE0by7nkVmhXJ1okIi2CVmYNagrqK9XqPeVOSg/17Rf5f1qYS5ZNcePdY1FI1CmlTEREyNUDKkGMNRmOtKZDqo/Gw+ogXIttInj01PIcQOuIVaI5SE1ktrKKSCB0NDTmY02CKVOJmclHQXjcaN1BiEtey062M1O5f4VqP0uW6nlFT9B2YHESxlhe/cE8ripjOZP6HAUU5Ob/RiW+4O1cdSF+pkF2bHNHNvT7nG0VixUAN/eIUwd+BMF3Rb2AdMEbEWRRhdhUQOTGA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qLrU4LDRZRZFvGKPWtuEx+PpBj+Wc6LuAtSEPf/cUb0=; b=s5jiARflhbIWDfOlburP00dEU+l5nM9AQZvGJia1AeL2+Fgcv/szk6iaG/RZyIe5go4pmU5PX8G5WUVD8age/0Pt+UmM83yWYvOgjfym2RigCDSla/rA31r80nr8WiBYjmzgLVJFlu3wZ/J3LAqhs74U1Hq70d9NDBEVdXmfo0E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY1PR13MB6310.namprd13.prod.outlook.com (2603:10b6:a03:52e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.38; Fri, 19 Apr 2024 03:12:55 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024 03:12:55 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH 3/8] net/nfp: adjust the data field of Rx/Tx queue Date: Fri, 19 Apr 2024 11:12:21 +0800 Message-Id: <20240419031226.1191069-4-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240419031226.1191069-1-chaoyong.he@corigine.com> References: <20240419031226.1191069-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0044.apcprd01.prod.exchangelabs.com (2603:1096:4:193::8) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY1PR13MB6310:EE_ X-MS-Office365-Filtering-Correlation-Id: b797d433-199c-4d12-0a36-08dc601e9b2d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: t9B5r5RLoJSRpCJbKw4IOS4HANPjvn0/1cEClFabxEXwVZqffDYT2CMTkv2XG3WPCoI0JgO01b8ro7UCiV5DUMVuVqWpEyBBAMua5Em5L4UEA+kP+P+r9p+tJgKrJ7sfXEIieTC/3HiaEUscUqii0KIwM0mVn+S+4fo/rBbXUg5H8gYTyQ64JT27biJAtvQYlZVPCwEaVQVG15ZevK2z8ByfqGJZMtk+rrkwuVGH4DjNCcQmpVrvF3ArIkvkUr+ve24t2cJ/c+syIivbyNR4hFEGW7Y3ueJ6CYCmo6wDNtz22nvm5+vVl5/t7YCjToP7NYEmC7vvwCRZEj++jap+mOd8syNgGom+A4ThR3rrTtHIHywYK1BgIVCh2VplJL+FofJjWPz1VcecW0FdgKM94wczvJRWVLAlBBan2vpYufzNmuzNRHWMs30oVaLiPCh8DihhJvcdhmktQakjlIyX1lOdtqcldCFLRUoE6nR5AkWXxpCRzXoJIcXhwxKvgycZ9Uh6sGCTTGH5x9CsOwYknV5moIzQE1jXDW4Bj5t3ppSMvYZbU6ACh92+3CmWxWxFJnGjC56HlNnEuFSt3mWoIHuzW55TVgNjpdPDKfXtIiHWuXkHhfMw5zC7Fbaq9SpUQ044JX+e4bdhZG5IUpPvAOSgyj9KLsgetQNeOeiyswqM0c4J/wmrttwDl2gDnaMKV2SOlV2iOlvfY+Pmi1SXj7wB01jor8x/EAJoszcG23eiJaHp28astk7/kIW9CBEOrXP179WBMhVLXPoACZhNfW6HYUqMPe1nqwi6lr718Ggpal/sFB62uvq8UTe5AmDnQxDXFEJHBeNbdcSrgItepTTlZyM5WoP5m55MXjCJc2DLuDWJ41mZ+RpQpihW5zWmqPexdThGeEA/qI3yARzJJwL7c/THhj4ertXtKlotvR9HYSZI5hIDmaUIJXbdO28hdjvZY5A/cYK7weTit1imwyd49t4vat9w7hUquJU+PgHx55roCGg9yNRKWk3Hd3atSqQx+ZzJrEyAlLnfSypyuAV/fOHjDIsRokjLI2KRj9AXY2AyKWOAU1Xbk51gyvXRu7R8X6qn4Gd+Bohr8XMdHyTHuG4qNhtpL5aVbc50L/xmLO7IvcwYThQ48SAidNHRd2KDg2Bi762IDWHV4fGijGlJW+A72wNrzHpjVeV80QoDa1tSEZ5de4LTyklewRdwfQnKDr/eq+LdJg/qOFExxayGshFQ2+DaAXBmpc8eTS4VtHNb4OX65n8VubcKYwjLnZ4EuXAEU8ZcENQDSrVxIgGZf2XAZbu2DF+S3DcKOpRG6okOVyQtppjfQqdzw0fjxatAtA4obhJggxE8cYy8ug== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(52116005)(376005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: K8Tv/p+VG8SwT67THZy+OsuzQRKs0IWuAWrSOocu6cs1WAhKjYsdN/OML2Jn3WcbVQzGONFGdzlAq4RWY0GLXbNsnoM+AGXZoHMeUskI5f7bUpX9DOVBcrRRuOKsPa+9qQUhAngjm0/ziR/1OoalHITUwZbRyj9jxSyivfuqlUBtIpqkiMtwuaIi1ncMDQVpjcZc5OLyOFRkbJZU/6VEHXbedByo81z7U8HRwz7YPbfYmOo/x5etYaHWg9Yrs9f1XC9Tubz78iZSlCZWcGLAH9D+8F90xT739DRdy3T5hkuCoOPbnqtnExv5CsTrGac9BwWOfw3M8aLNM8YWtaL77r5QffQfALrYBif4qKAXU/Ueqf7B5k0sF2YyLkctAXPHAsG2dKMS18V6H5Ik9AF9M7Wnh3670kgqkFpkxEYdyR+qdaYm+4wfeUCX+6Ct6Hv7ck5mTYPdHV0yW0W8gGH7ifQufrlWC2PF9RmwGx+ZCNQ2yP+rKQt6pB+0E166LaVCLrDP83Am8vj8wUFXoj6PKss+7D4Gnfxkv3ydlT9hJ2elgQF0tT19h5J7C2Qk40YPcKrtEGWYt6tDvzaZpqB/lWCPONhLy0O1oZC/jcnFWJjkfeWkndep2dnR7gKrw05DVQGz1XvzwkP7Ft645+v4ZvAZRWZ4L6DSF5rYiCGU75UDU3al7nqS+23E+7eYkXbtdEnOJNwPJojQSrE2sfylz5JJ5fJ6V34xkidOA/bwiHUhVxzWdONc3DzPgX28Es8+xfmnj7bek0cFq66JxK6L9XmAPz1aZcl28qSX3UmAuwYWZm8UHY7nkALb26KrEersM38vy6kDBQsueb57xuCdlPCJOIsRTfIsdCT2gXRGaTVA/67RAg/vdcUAnyJOH6imMNtF5IZAlDbNzxCJFH5pP/Gts8G0Bgrl/8t2A5mPlGfwoc8adw0+3MuE4wZ5cqbUFHjfwofxzJZtimH8SjEwaTOTa1XBoRhWxv5rltjFTKpfQFGk9eCuJC7Y8n/I+wYNea4ouZlUteI4Yk//Y91gLTB04WefPILZTVr2YDU5PUSFXTFm6QGI2NgMkRALVdhcxrSqEF5Gy8mwyT4kH+k9bu/CFiyIgxWQtLlKF1/qIHNP6N1dTqZ9PynT4eckkDH/1m2SKzwXNLGMBOzRK8D3pVf8Xg1K8qinjDNDOjDqRRJHunwm2l/cf7wWTnNZfC/8gIdcTNZkkSAdgiYit0DSEkbg9OXaw9dYVie60WcnTLVWfgDNAFPdlcZrV3eWbT8kOAyEytN3xs4CPb1yCLdELs5lqMyVQEAWFK1W2itzezdL1cCpIyHS/oAA8HXtyB1P8mP2uRulZROh3omNgpmkpnIGDfsPlJHzH3A1Wc/mWQdRjOj0paERUnyze2oB/B4fD5rM4UlBxspnNp6ka8kCsLgWFpBtHpYQmhecHHyF9tapIJuAXZ4hY0mXJ3+/f+EZPNz6GncHiJlefYrHUcTu1lz39nx1QkuOIHvorFt4O7TPAsrryiRPjCSRwhaurGy6eUXvyZ1kdw1+QU1vHu/cBs80pPiln3iL5X0t55fFQVKXpnMORXqAsaJyW8sDv3jHrjSDtsehsWn2rflPFhuqsQ== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: b797d433-199c-4d12-0a36-08dc601e9b2d X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 03:12:54.9957 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4GuIJQacAzSwNUg5hGknbp4sGvYxrUlhmMTEXIMepB3PLIebwK9nQ1j8JpJwTd6Yh3li5jm9W8JWNWyUsK/FXPRHBRoxp06zMJie3ek8ss8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR13MB6310 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 Adjust the data field of Rx/Tx queue structure, move the cold data back and hold position for hot data. Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/nfp_rxtx.h | 71 +++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index f463b9cf75..0aa73a6432 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -31,21 +31,6 @@ struct nfp_net_txq { /** Backpointer to nfp_net structure */ struct nfp_net_hw *hw; - /** Point to the base of the queue structure on the NFP. */ - uint8_t *qcp_q; - - /** - * Host side read and write pointer, they are free running and - * have little relation to the QCP pointers. - */ - uint32_t wr_p; - uint32_t rd_p; - - /** The size of the queue in number of descriptors. */ - uint32_t tx_count; - - uint32_t tx_free_thresh; - /** * For each descriptor keep a reference to the mbuf and * DMA address used until completion is signalled. @@ -61,6 +46,18 @@ struct nfp_net_txq { struct nfp_net_nfdk_tx_desc *ktxds; }; + /** + * Host side read and write pointer, they are free running and + * have little relation to the QCP pointers. + */ + uint32_t wr_p; + uint32_t rd_p; + + /** The size of the queue in number of descriptors. */ + uint32_t tx_count; + + uint32_t tx_free_thresh; + /** The index of the QCP queue relative to the TX queue BAR. */ uint32_t tx_qcidx; @@ -72,8 +69,8 @@ struct nfp_net_txq { uint16_t data_pending; /** - * At this point 58 bytes have been used for all the fields in the - * TX critical path. We have room for 6 bytes and still all placed + * At this point 50 bytes have been used for all the fields in the + * TX critical path. We have room for 14 bytes and still all placed * in a cache line. */ uint64_t dma; @@ -83,6 +80,9 @@ struct nfp_net_txq { /** TX pointer ring write back area DMA address */ uint64_t txrwb_dma; + + /** Point to the base of the queue structure on the NFP. */ + uint8_t *qcp_q; } __rte_aligned(64); /* RX and freelist descriptor format */ @@ -145,19 +145,6 @@ struct nfp_net_rxq { */ uint8_t *qcp_fl; - /** - * Host side read pointer, free running and have little relation - * to the QCP pointers. It is where the driver start reading - * descriptors for newly arrive packets from. - */ - uint32_t rd_p; - - /** - * The index of the QCP queue relative to the RX queue BAR - * used for the freelist. - */ - uint32_t fl_qcidx; - /** * For each buffer placed on the freelist, record the * associated mbuf. @@ -177,6 +164,14 @@ struct nfp_net_rxq { * safely copied to the mbuf using the NFP_NET_RX_OFFSET. */ struct rte_mempool *mem_pool; + + /** + * Host side read pointer, free running and have little relation + * to the QCP pointers. It is where the driver start reading + * descriptors for newly arrive packets from. + */ + uint32_t rd_p; + uint16_t mbuf_size; /** @@ -186,9 +181,6 @@ struct nfp_net_rxq { uint16_t rx_free_thresh; uint16_t nb_rx_hold; - /** The size of the queue in number of descriptors */ - uint16_t rx_count; - /** Referencing dev->data->port_id */ uint16_t port_id; @@ -196,11 +188,20 @@ struct nfp_net_rxq { uint16_t qidx; /** - * At this point 60 bytes have been used for all the fields in the - * RX critical path. We have room for 4 bytes and still all placed + * At this point 54 bytes have been used for all the fields in the + * RX critical path. We have room for 10 bytes and still all placed * in a cache line. */ + /** The size of the queue in number of descriptors */ + uint16_t rx_count; + + /** + * The index of the QCP queue relative to the RX queue BAR + * used for the freelist. + */ + uint32_t fl_qcidx; + /** DMA address of the queue */ uint64_t dma; } __rte_aligned(64); From patchwork Fri Apr 19 03:12:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 139519 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 D39FF43EA9; Fri, 19 Apr 2024 05:13:26 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4CCE64069D; Fri, 19 Apr 2024 05:13:02 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2099.outbound.protection.outlook.com [40.107.237.99]) by mails.dpdk.org (Postfix) with ESMTP id EF4554067E for ; Fri, 19 Apr 2024 05:12:59 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JQcFfb3lywB2dzNMplGKmnqpoztK1bdaevQfsKNtLlDgMZhH3X7VM2mt/WSKxx7E10Ui+FOMSR6PiJ2aDtEk9ebhd7jnyOaP0RkfhT1Ch6Ykmv3DccFj+e48Fm+f9ubn718BNXBIIYmgsQr3w4Fc365ZNj4EuYKwma+pMv+WnBIPwAoQ9oVhs+pXCA/SmIjK6Dc0h3PxmBMhZjysE/h0pUxItgAx60+GxAg7gBJWZMuhQLuJCBb3FE3HpHjGigwK7pZYZ5tqmoRX4giLqk5/BLK4RLNGe5ZDdxUXRCi6sZEc535xQ5AAQ7kK908GtHo5U/DSdzXdQ9ifapJd+Gr2jA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=8UK+qaswxvEmsZR4o6n7KnuQxNbuEMYIKd0zvhGXAFM=; b=MKzdffkDlh/XBjtcnJKfdjTE0rkjWNe8hJKH0XH6nAYA7SYcnQDQacOzIQoLq0O7Za7gs+4HUt4EH50qZqMguES531qDuO2MWYixIjoGyQdx1o1AmMZ0OrpmMRnfF23/uOFJYo6PZjP+3ZtKGlK7R8h23ZzDXzyRv1P7CVa33Y7yJx4NFoj1hG4nxcCzStY7TsIRySmlnhIddysTt541NLi2WlA8TRXlrlc1v5E6DKRjkCT8XUzgmFpbJxID9aLJRZGrqbtzeWvom5G9laMpOrDfmmKHLvQTCb3KBscvSqYinJZI4DH7waPrNPSPNAOyGbQf9JomKawgfja+K3ZXmg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8UK+qaswxvEmsZR4o6n7KnuQxNbuEMYIKd0zvhGXAFM=; b=PbOgwgfGj8rjHvp4xTuzpLjhPwfmSoIdRWoCOsRHDf5t7rrK99fu2SNQOMN0TNasAFfu35+1PlJytDEuMGpxNTd3WK+YNTYs6TwdwTBNJP6DB/tpxYdmgArHoQf9CrM9fdPEt+FcWou7l4x2PTzLsZNhQS8SCxBNSt3o9InrlKs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY1PR13MB6310.namprd13.prod.outlook.com (2603:10b6:a03:52e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.38; Fri, 19 Apr 2024 03:12:57 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024 03:12:57 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH 4/8] net/nfp: add the process private structure Date: Fri, 19 Apr 2024 11:12:22 +0800 Message-Id: <20240419031226.1191069-5-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240419031226.1191069-1-chaoyong.he@corigine.com> References: <20240419031226.1191069-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0044.apcprd01.prod.exchangelabs.com (2603:1096:4:193::8) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY1PR13MB6310:EE_ X-MS-Office365-Filtering-Correlation-Id: 23183e83-f0e4-4bf0-5454-08dc601e9ca1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZhR4dhDoKpweBEgbmUjflbNZb45dmxFI4ba1E5fc6goI6T8a5o12chPaYYQjWhlk5Fns9urbhMlHoPRH6Yu9mQu0F94289EoJl9mqnAXuuKrcdrgZ7RdvbVpkJONW9EoKr+R+IIlQR+iKZhxChvEgvy2rgE5elwqMYTpMlw5tNIy8vlgvqyvcpPMWgiz4zliJj2OBRkHobPGJSMnMVrAyWb687vG0eV3S/332/7l8ZjUT4qSF4P0/EEVBOmWo07GM3GMxH8lAvadeGqN2ZpXAP4S+Lwfb2twpDT3FmKVJgAumPDGOqqI1R3OgLYRAiLiusx9jfnva+DmUcNS7+PkIgTx/5UyXsItJcrq/IYBmBctGxHOKKzNMaFuecr20yoY6NsaAAufw4NtKgRFFMVYSV90GGyEQyZa7M1hv9/UlXoBxK7xoArbwWqRmnw8XcMb2Jd7ldWQ23N1i7kagLmnwIyTM73QNt7k18lEGelTa1B7I01UU6Ajkafz2AhybFh/fc11r7EEkC24blAeTcjdTueiJHCv+9sJBHWcFFx0Oh4lty2Y6Muu9n6Wm70tKyq/LjmNvCmTEMmv5UeCvGSdxJTcFLCBp2/XZiQhmwehSYZbiqo8XE7KWgZr2TxwVl+1alLeCIGSoJBCZJ7Cvwtxz9XwvMVuFEUTTKxdHIi5GT0Zrv+RMu3RSb5I0j6EEt4fN1FFGJ95z+VtYPw4cyr/SivrTWl4a+uWLSUqiO1gj7Y8jgkM/XoewSILKPVQGle6M0Yf+D/JdPPOz+DFEfqsEqZjYmYHT1KgFvMWWb5SxcGGe8olrhVFzAXfon7fEo1/ekfIkZMDjp1dDHTVpMvkg1kQGrhsHOI282bhJ+C26zlawSupDBqVIglqoht6sRCgTdROECOpNrYSmjCIENG8vibScNVWZQ1aLF/jEb1JJ6U1nlcWk0KQN4PQ99fcI9b05D9fRvCAeGm99BlmZBusAxm+NM1lZMdoqLjDDzR/A1xsmR9AcdQ+spHKnrEcnChaQbNpRmvV91vrWiKFweOoWyD0z6sgyj4u4IeVCCt2YaTlYZFCdfyiKSWbAgNGFDgDwO8afQrgQ0Y88H+x8JcLV4kqwhRXHeWQetTyzJz0/uMg/ruBGi+by/o0t+Av1gnp2H3s9aSHKTmpRarZgz6eaZiCeCwP6FkIFe19c5gaYTEzb1QHiTUkwK6mHGdI8o4P1LbRs+7jfSqqrImntWqtK/Vk9WzhZnzvRydaoORnfeO1M5T/JbxY9ev6GowfaDIQH/CNJqddcgQJ4yEmcpBEe64Y1xMpIsgNy288d7s9LipEstK4bdXVnDYhS/2NjNnp2fqknTrIgsf9vYd52h5VrA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(52116005)(376005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9k/saA1zsEgoIKn9SzJCm7Jp1kMGJPn7PSdoZ4Vw3BxHMFd+NHdxUe61n3wXzx2HTxfDyULerao/AJA7Xpr768ZWGQ57hdJc14vYMpXiVY4UvR8xPc8R+6nqAdmpL42nreV0Uzu4S58ozA1LgLTywl1PUYqfwLAqpauvieMSErHcvU2qfZTCs1b7JaWyTmLR/1BdKt+xmltYvo5JDvpu5DA9ACu2wS+Ca2VpFUnCJlNeMCxPVzR3cFtP2y6sJXWOf991k/oxZOIo3ylqSVLL9ThqouiSiWyr058PbfVYcbdwiI/FUCxUdVQeAFF7OAU30XIzdpoPVVK77nJTXi6zOqAQYqgeZmhEMRw3oNVXIuF0MznWghZdoqa+QotItyU4LtbooyGl80I81FDESbdYG32JdjfFs3M7ZlGqhalYn2ZT+PhO00N/pirf3oiFUWIk/87bp1vU/Q2WsLcWqnvT6KB5601/7RUbAMt7+DMgr9J3rFz1F1kIz20QK3Q+2X3YoK0KZBcuTVsrMHcZzqFEU2hnqDoyYXt4tprWg0sZ7sd+eqtM3JEiEWatJNegE/QP8HUmJxgX2SvmHy1eARCuep7TednQ2+qN3BzsNJ4nIcVKIOHxtDjV2tlznS1ZUE6G+xYVK8kswddyw8i0tnqQStE0xXZPhOx2g7ddesOjXK+bdbWm6jjtGl/oMjaIPRH5eLCccYrYbQLisF6guYqLz5HlWT7TxKI/3BG1AvD84wmKp8Wya2ZRA60KjEVH6tGHHZ17dZF9kkMznWBwyCON6F/sHQPIDTkEF5bkmI3N4m93BiueGmXCik/tu88cJ8s8Bk0NKoLCxdKIaGEahW2Cd1El98ckEhY3yxwFFZVooFzzoZU8MGKegBDQIQhkUKokdj/p7uWTwBNQDWX8P0atqzMY8uQlMUCh2p6oj6U/7CXwDsawM9B9rSlOxgyXtuDXMpas1vamkvWvZqDQCdce8XwSV2kCvv+uv1mFn9p0sMffDumBaRh3UsY3XAhVuo0ZG8XFA953KbUIOFXYmQB9FUu1nHyiW8Oqs+RuEqVH+nBgHHpb37iqwN79Fg8+AOfsNnwqZBTEX4/HAp8vNn12C96au+Zg4ENJFpLLbGMq6ebtPNSnW7WDHjU+RuYiflb1xFVvA/ykPkK4lxQ9UYd71x1HzFZA3rBcjUAHfRriVY3u+wny8wADFfHkxTlL6iV1LaRa1w6RWoc2Tr9R3n6nm8Y1fCo7CCwLxgz1q7EW0eSgecc2x46cjEbUeaGzHsAN9uYEDhy7NIRAy2yWxZ44ptdBx/qdG9Q+lpVDGvjmPGJrLuySQZQEqDtgJ0/+gUE93FdxOhVCkEO+lbTwVKNdatxSe50RDpv8+qhFYU/G3Z7i2ZUgOZoxwcuiwGzSe3eq1uY9CLttlFyVXMhxVJVmUbnUyYpWS4ByqABIGe+d8pQmyGC7tZ3F1b8bSbwV1dg/22XXDttgRsReIcFmmKlbpCrO50h8E3ijkUPGJM5UmYAMgSx0LHr6B/4fzm0kufDyVt6wFoEVpSXJkro6FvGK2jc75BFFODYMv731FSyUCgLv+hosz3CCQH0aHQWULZABTc6DEs/r3Mo1TDrWTQrJkg== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 23183e83-f0e4-4bf0-5454-08dc601e9ca1 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 03:12:57.8663 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GOvxJ0WBkhZ0Fk9i2WUH2Oq9aiEXTS+GGXASJisK6YPNEFiysRo4/k6nQ/OmdZ9esrAWYPsjG1t0+m/IPl5Ce6YZjgbO+IpR7JSEBwweimM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR13MB6310 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 Add a new data structure to hold the process private data, and modify logic to make sure only get 'pf_dev' from the process private data. Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/flower/nfp_flower.c | 69 +++++------ drivers/net/nfp/flower/nfp_flower.h | 8 +- drivers/net/nfp/flower/nfp_flower_cmsg.c | 5 +- drivers/net/nfp/flower/nfp_flower_cmsg.h | 3 +- .../net/nfp/flower/nfp_flower_representor.c | 85 ++++++++++---- .../net/nfp/flower/nfp_flower_representor.h | 3 +- drivers/net/nfp/flower/nfp_flower_service.c | 32 +++--- drivers/net/nfp/flower/nfp_flower_service.h | 10 +- drivers/net/nfp/nfd3/nfp_nfd3_dp.c | 1 + drivers/net/nfp/nfdk/nfp_nfdk_dp.c | 1 + drivers/net/nfp/nfp_ethdev.c | 107 +++++++++++++----- drivers/net/nfp/nfp_net_common.c | 67 +++++++---- drivers/net/nfp/nfp_net_common.h | 15 ++- drivers/net/nfp/nfp_net_flow.c | 20 +++- drivers/net/nfp/nfp_rxtx.c | 5 +- drivers/net/nfp/nfp_rxtx.h | 10 +- 16 files changed, 283 insertions(+), 158 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 303f6bd3f6..efa604fd58 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -102,14 +102,14 @@ static const struct eth_dev_ops nfp_flower_pf_vnic_ops = { }; static inline struct nfp_flower_representor * -nfp_flower_get_repr(struct nfp_net_hw *hw, +nfp_flower_get_repr(struct nfp_net_hw_priv *hw_priv, uint32_t port_id) { uint8_t port; struct nfp_app_fw_flower *app_fw_flower; /* Obtain handle to app_fw_flower here */ - app_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(hw->pf_dev->app_fw_priv); + app_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(hw_priv->pf_dev->app_fw_priv); switch (NFP_FLOWER_CMSG_PORT_TYPE(port_id)) { case NFP_FLOWER_CMSG_PORT_TYPE_PHYS_PORT: @@ -126,13 +126,13 @@ nfp_flower_get_repr(struct nfp_net_hw *hw, } bool -nfp_flower_pf_dispatch_pkts(struct nfp_net_hw *hw, +nfp_flower_pf_dispatch_pkts(struct nfp_net_hw_priv *hw_priv, struct rte_mbuf *mbuf, uint32_t port_id) { struct nfp_flower_representor *repr; - repr = nfp_flower_get_repr(hw, port_id); + repr = nfp_flower_get_repr(hw_priv, port_id); if (repr == NULL) { PMD_RX_LOG(ERR, "Can not get repr for port %u", hw->idx); return false; @@ -189,13 +189,14 @@ nfp_flower_pf_xmit_pkts(void *tx_queue, struct nfp_app_fw_flower *app_fw_flower; txq = tx_queue; - app_fw_flower = txq->hw->pf_dev->app_fw_priv; + app_fw_flower = txq->hw_priv->pf_dev->app_fw_priv; return app_fw_flower->nfd_func.pf_xmit_t(tx_queue, tx_pkts, nb_pkts); } static int -nfp_flower_init_vnic_common(struct nfp_net_hw *hw, +nfp_flower_init_vnic_common(struct nfp_net_hw_priv *hw_priv, + struct nfp_net_hw *hw, const char *vnic_type) { int err; @@ -205,8 +206,8 @@ nfp_flower_init_vnic_common(struct nfp_net_hw *hw, struct nfp_pf_dev *pf_dev; struct rte_pci_device *pci_dev; - pf_dev = hw->pf_dev; - pci_dev = hw->pf_dev->pci_dev; + pf_dev = hw_priv->pf_dev; + pci_dev = pf_dev->pci_dev; PMD_INIT_LOG(DEBUG, "%s vNIC ctrl bar: %p", vnic_type, hw->super.ctrl_bar); @@ -239,13 +240,15 @@ nfp_flower_init_vnic_common(struct nfp_net_hw *hw, } static int -nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw) +nfp_flower_init_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_net_hw_priv *hw_priv) { uint16_t i; int ret = 0; uint16_t n_txq; uint16_t n_rxq; const char *pci_name; + struct nfp_net_hw *hw; unsigned int numa_node; struct rte_mempool *mp; struct nfp_net_rxq *rxq; @@ -253,16 +256,15 @@ nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw) struct nfp_pf_dev *pf_dev; struct rte_eth_dev *eth_dev; const struct rte_memzone *tz; - struct nfp_app_fw_flower *app_fw_flower; char ctrl_rxring_name[RTE_MEMZONE_NAMESIZE]; char ctrl_txring_name[RTE_MEMZONE_NAMESIZE]; char ctrl_pktmbuf_pool_name[RTE_MEMZONE_NAMESIZE]; /* Set up some pointers here for ease of use */ - pf_dev = hw->pf_dev; - app_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(pf_dev->app_fw_priv); + pf_dev = hw_priv->pf_dev; + hw = app_fw_flower->ctrl_hw; - ret = nfp_flower_init_vnic_common(hw, "ctrl_vnic"); + ret = nfp_flower_init_vnic_common(hw_priv, hw, "ctrl_vnic"); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not init pf vnic"); return -EINVAL; @@ -397,6 +399,7 @@ nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw) nfp_net_reset_rx_queue(rxq); rxq->hw = hw; + rxq->hw_priv = hw_priv; /* * Telling the HW about the physical address of the RX ring and number @@ -462,6 +465,7 @@ nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw) nfp_net_reset_tx_queue(txq); txq->hw = hw; + txq->hw_priv = hw_priv; /* * Telling the HW about the physical address of the TX ring and number @@ -472,7 +476,7 @@ nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw) } /* Alloc sync memory zone */ - ret = nfp_flower_service_sync_alloc(app_fw_flower); + ret = nfp_flower_service_sync_alloc(hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Alloc sync memory zone failed"); goto tx_queue_setup_cleanup; @@ -512,21 +516,22 @@ nfp_flower_init_ctrl_vnic(struct nfp_net_hw *hw) } static void -nfp_flower_cleanup_ctrl_vnic(struct nfp_net_hw *hw) +nfp_flower_cleanup_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_net_hw_priv *hw_priv) { uint32_t i; const char *pci_name; + struct nfp_net_hw *hw; struct nfp_net_rxq *rxq; struct nfp_net_txq *txq; struct rte_eth_dev *eth_dev; - struct nfp_app_fw_flower *app_fw_flower; char ctrl_txring_name[RTE_MEMZONE_NAMESIZE]; char ctrl_rxring_name[RTE_MEMZONE_NAMESIZE]; + hw = app_fw_flower->ctrl_hw; eth_dev = hw->eth_dev; - app_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(hw->pf_dev->app_fw_priv); - pci_name = strchr(app_fw_flower->pf_hw->pf_dev->pci_dev->name, ':') + 1; + pci_name = strchr(hw_priv->pf_dev->pci_dev->name, ':') + 1; snprintf(ctrl_txring_name, sizeof(ctrl_txring_name), "%s_cttx_ring", pci_name); for (i = 0; i < hw->max_tx_queues; i++) { @@ -548,7 +553,7 @@ nfp_flower_cleanup_ctrl_vnic(struct nfp_net_hw *hw) } } - nfp_flower_service_sync_free(app_fw_flower); + nfp_flower_service_sync_free(hw_priv); rte_free(eth_dev->data->tx_queues); rte_free(eth_dev->data->rx_queues); rte_mempool_free(app_fw_flower->ctrl_pktmbuf_pool); @@ -634,7 +639,7 @@ nfp_flower_nfd_func_register(struct nfp_app_fw_flower *app_fw_flower) } int -nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, +nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv, const struct nfp_dev_info *dev_info) { int ret; @@ -644,6 +649,7 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, struct nfp_net_hw *pf_hw; struct nfp_net_hw *ctrl_hw; struct nfp_app_fw_flower *app_fw_flower; + struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; numa_node = rte_socket_id(); @@ -702,11 +708,10 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, /* Fill in the PF vNIC and populate app struct */ app_fw_flower->pf_hw = pf_hw; pf_hw->super.ctrl_bar = pf_dev->ctrl_bar; - pf_hw->pf_dev = pf_dev; pf_hw->cpp = pf_dev->cpp; pf_hw->dev_info = dev_info; - ret = nfp_flower_init_vnic_common(app_fw_flower->pf_hw, "pf_vnic"); + ret = nfp_flower_init_vnic_common(hw_priv, pf_hw, "pf_vnic"); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize flower PF vNIC"); goto pf_cpp_area_cleanup; @@ -728,11 +733,10 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, } /* Now populate the ctrl vNIC */ - ctrl_hw->pf_dev = pf_dev; ctrl_hw->cpp = pf_dev->cpp; ctrl_hw->dev_info = dev_info; - ret = nfp_flower_init_ctrl_vnic(app_fw_flower->ctrl_hw); + ret = nfp_flower_init_ctrl_vnic(app_fw_flower, hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize flower ctrl vNIC"); goto ctrl_cpp_area_cleanup; @@ -746,14 +750,14 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, } /* Start up flower services */ - ret = nfp_flower_service_start(app_fw_flower); + ret = nfp_flower_service_start(app_fw_flower, hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not enable flower services"); ret = -ESRCH; goto ctrl_vnic_cleanup; } - ret = nfp_flower_repr_create(app_fw_flower); + ret = nfp_flower_repr_create(app_fw_flower, hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not create representor ports"); goto ctrl_vnic_service_stop; @@ -762,9 +766,9 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, return 0; ctrl_vnic_service_stop: - nfp_flower_service_stop(app_fw_flower); + nfp_flower_service_stop(app_fw_flower, hw_priv); ctrl_vnic_cleanup: - nfp_flower_cleanup_ctrl_vnic(app_fw_flower->ctrl_hw); + nfp_flower_cleanup_ctrl_vnic(app_fw_flower, hw_priv); ctrl_cpp_area_cleanup: nfp_cpp_area_free(ctrl_hw->ctrl_area); pf_cpp_area_cleanup: @@ -782,12 +786,13 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, } void -nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev) +nfp_uninit_app_fw_flower(struct nfp_net_hw_priv *hw_priv) { struct nfp_app_fw_flower *app_fw_flower; + struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; app_fw_flower = pf_dev->app_fw_priv; - nfp_flower_cleanup_ctrl_vnic(app_fw_flower->ctrl_hw); + nfp_flower_cleanup_ctrl_vnic(app_fw_flower, hw_priv); nfp_cpp_area_free(app_fw_flower->ctrl_hw->ctrl_area); nfp_cpp_area_free(pf_dev->ctrl_area); rte_free(app_fw_flower->pf_hw); @@ -799,7 +804,7 @@ nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev) } int -nfp_secondary_init_app_fw_flower(struct nfp_pf_dev *pf_dev) +nfp_secondary_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv) { struct rte_eth_dev *eth_dev; const char *port_name = "pf_vnic_eth_dev"; @@ -812,7 +817,7 @@ nfp_secondary_init_app_fw_flower(struct nfp_pf_dev *pf_dev) return -ENODEV; } - eth_dev->process_private = pf_dev; + eth_dev->process_private = hw_priv; eth_dev->dev_ops = &nfp_flower_pf_vnic_ops; eth_dev->rx_pkt_burst = nfp_net_recv_pkts; eth_dev->tx_pkt_burst = nfp_flower_pf_xmit_pkts; diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index 8393de66c5..5cc29dcc87 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -104,11 +104,11 @@ nfp_flower_support_decap_v2(const struct nfp_app_fw_flower *app_fw_flower) return app_fw_flower->ext_features & NFP_FL_FEATS_DECAP_V2; } -int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev, +int nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv, const struct nfp_dev_info *dev_info); -void nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev); -int nfp_secondary_init_app_fw_flower(struct nfp_pf_dev *pf_dev); -bool nfp_flower_pf_dispatch_pkts(struct nfp_net_hw *hw, +void nfp_uninit_app_fw_flower(struct nfp_net_hw_priv *hw_priv); +int nfp_secondary_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv); +bool nfp_flower_pf_dispatch_pkts(struct nfp_net_hw_priv *hw_priv, struct rte_mbuf *mbuf, uint32_t port_id); uint16_t nfp_flower_pf_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.c b/drivers/net/nfp/flower/nfp_flower_cmsg.c index eefeb0d887..2a0e9afe90 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.c +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.c @@ -81,7 +81,8 @@ nfp_flower_cmsg_mac_repr_fill(struct rte_mbuf *m, } int -nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower) +nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_eth_table *nfp_eth_table) { uint8_t i; uint16_t cnt; @@ -89,7 +90,6 @@ nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower) uint32_t nbi_port; uint32_t phys_port; struct rte_mbuf *mbuf; - struct nfp_eth_table *nfp_eth_table; mbuf = rte_pktmbuf_alloc(app_fw_flower->ctrl_pktmbuf_pool); if (mbuf == NULL) { @@ -100,7 +100,6 @@ nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower) nfp_flower_cmsg_mac_repr_init(mbuf, app_fw_flower); /* Fill in the mac repr cmsg */ - nfp_eth_table = app_fw_flower->pf_hw->pf_dev->nfp_eth_table; for (i = 0; i < app_fw_flower->num_phyport_reprs; i++) { nbi = nfp_eth_table->ports[i].nbi; nbi_port = nfp_eth_table->ports[i].base; diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index c94ea706bb..afaf733ef7 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -975,7 +975,8 @@ struct nfp_fl_act_mark { rte_be32_t mark; }; -int nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower); +int nfp_flower_cmsg_mac_repr(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_eth_table *nfp_eth_table); int nfp_flower_cmsg_repr_reify(struct nfp_app_fw_flower *app_fw_flower, struct nfp_flower_representor *repr); int nfp_flower_cmsg_port_mod(struct nfp_app_fw_flower *app_fw_flower, diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index d4c3c30682..934f078dca 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -83,17 +83,17 @@ nfp_flower_repr_dev_infos_get(__rte_unused struct rte_eth_dev *dev, static int nfp_flower_repr_dev_start(struct rte_eth_dev *dev) { + uint16_t i; + struct nfp_net_hw_priv *hw_priv; struct nfp_flower_representor *repr; struct nfp_app_fw_flower *app_fw_flower; - uint16_t i; repr = dev->data->dev_private; + hw_priv = dev->process_private; app_fw_flower = repr->app_fw_flower; - if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) { - nfp_eth_set_configured(app_fw_flower->pf_hw->pf_dev->cpp, - repr->nfp_idx, 1); - } + if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) + nfp_eth_set_configured(hw_priv->pf_dev->cpp, repr->nfp_idx, 1); nfp_flower_cmsg_port_mod(app_fw_flower, repr->port_id, true); @@ -108,19 +108,19 @@ nfp_flower_repr_dev_start(struct rte_eth_dev *dev) static int nfp_flower_repr_dev_stop(struct rte_eth_dev *dev) { + uint16_t i; + struct nfp_net_hw_priv *hw_priv; struct nfp_flower_representor *repr; struct nfp_app_fw_flower *app_fw_flower; - uint16_t i; repr = dev->data->dev_private; + hw_priv = dev->process_private; app_fw_flower = repr->app_fw_flower; nfp_flower_cmsg_port_mod(app_fw_flower, repr->port_id, false); - if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) { - nfp_eth_set_configured(app_fw_flower->pf_hw->pf_dev->cpp, - repr->nfp_idx, 0); - } + if (repr->repr_type == NFP_REPR_TYPE_PHYS_PORT) + nfp_eth_set_configured(hw_priv->pf_dev->cpp, repr->nfp_idx, 0); for (i = 0; i < dev->data->nb_rx_queues; i++) dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STOPPED; @@ -408,8 +408,8 @@ static int nfp_flower_repr_dev_close(struct rte_eth_dev *dev) { uint16_t i; - struct nfp_net_hw *hw; struct nfp_pf_dev *pf_dev; + struct nfp_net_hw_priv *hw_priv; struct nfp_flower_representor *repr; struct nfp_app_fw_flower *app_fw_flower; @@ -417,9 +417,10 @@ nfp_flower_repr_dev_close(struct rte_eth_dev *dev) return 0; repr = dev->data->dev_private; + hw_priv = dev->process_private; + app_fw_flower = repr->app_fw_flower; - hw = app_fw_flower->pf_hw; - pf_dev = hw->pf_dev; + pf_dev = hw_priv->pf_dev; if (pf_dev->app_fw_id != NFP_APP_FW_FLOWER_NIC) return -EINVAL; @@ -442,14 +443,14 @@ nfp_flower_repr_dev_close(struct rte_eth_dev *dev) return 0; /* Stop flower service first */ - nfp_flower_service_stop(app_fw_flower); + nfp_flower_service_stop(app_fw_flower, hw_priv); /* Disable cpp service */ nfp_service_disable(&pf_dev->cpp_service_info); /* Now it is safe to free all PF resources */ - nfp_uninit_app_fw_flower(pf_dev); - nfp_pf_uninit(pf_dev); + nfp_uninit_app_fw_flower(hw_priv); + nfp_pf_uninit(hw_priv); return 0; } @@ -708,8 +709,43 @@ nfp_flower_repr_free_all(struct nfp_app_fw_flower *app_fw_flower) } } +static void +nfp_flower_repr_priv_init(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_net_hw_priv *hw_priv) +{ + uint32_t i; + struct rte_eth_dev *eth_dev; + struct nfp_flower_representor *repr; + + repr = app_fw_flower->pf_repr; + if (repr != NULL) { + eth_dev = repr->eth_dev; + if (eth_dev != NULL) + eth_dev->process_private = hw_priv; + } + + for (i = 0; i < NFP_MAX_PHYPORTS; i++) { + repr = app_fw_flower->phy_reprs[i]; + if (repr != NULL) { + eth_dev = repr->eth_dev; + if (eth_dev != NULL) + eth_dev->process_private = hw_priv; + } + } + + for (i = 0; i < MAX_FLOWER_VFS; i++) { + repr = app_fw_flower->vf_reprs[i]; + if (repr != NULL) { + eth_dev = repr->eth_dev; + if (eth_dev != NULL) + eth_dev->process_private = hw_priv; + } + } +} + static int -nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower) +nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_net_hw_priv *hw_priv) { int i; int ret; @@ -723,11 +759,11 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower) .app_fw_flower = app_fw_flower, }; - nfp_eth_table = app_fw_flower->pf_hw->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; eth_dev = app_fw_flower->ctrl_hw->eth_dev; /* Send a NFP_FLOWER_CMSG_TYPE_MAC_REPR cmsg to hardware */ - ret = nfp_flower_cmsg_mac_repr(app_fw_flower); + ret = nfp_flower_cmsg_mac_repr(app_fw_flower, nfp_eth_table); if (ret != 0) { PMD_INIT_LOG(ERR, "Cloud not send mac repr cmsgs"); return ret; @@ -739,7 +775,7 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower) /* PF vNIC reprs get a random MAC address */ rte_eth_random_addr(flower_repr.mac_addr.addr_bytes); - pci_dev = app_fw_flower->pf_hw->pf_dev->pci_dev; + pci_dev = hw_priv->pf_dev->pci_dev; pci_name = strchr(pci_dev->name, ':') + 1; @@ -813,6 +849,8 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower) if (i < app_fw_flower->num_vf_reprs) goto repr_free; + nfp_flower_repr_priv_init(app_fw_flower, hw_priv); + return 0; repr_free: @@ -822,7 +860,8 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower) } int -nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower) +nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_net_hw_priv *hw_priv) { int ret; struct nfp_pf_dev *pf_dev; @@ -832,7 +871,7 @@ nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower) .nb_representor_ports = 0 }; - pf_dev = app_fw_flower->pf_hw->pf_dev; + pf_dev = hw_priv->pf_dev; pci_dev = pf_dev->pci_dev; /* Allocate a switch domain for the flower app */ @@ -876,7 +915,7 @@ nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower) PMD_INIT_LOG(INFO, "%d number of VF reprs", app_fw_flower->num_vf_reprs); PMD_INIT_LOG(INFO, "%d number of phyport reprs", app_fw_flower->num_phyport_reprs); - ret = nfp_flower_repr_alloc(app_fw_flower); + ret = nfp_flower_repr_alloc(app_fw_flower, hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "representors allocation failed"); ret = -EINVAL; diff --git a/drivers/net/nfp/flower/nfp_flower_representor.h b/drivers/net/nfp/flower/nfp_flower_representor.h index 7a4e7ecfc1..41965f6e0e 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.h +++ b/drivers/net/nfp/flower/nfp_flower_representor.h @@ -23,7 +23,8 @@ struct nfp_flower_representor { struct rte_eth_dev *eth_dev; }; -int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower); +int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower, + struct nfp_net_hw_priv *hw_priv); bool nfp_flower_repr_is_vf(struct nfp_flower_representor *repr); #endif /* __NFP_FLOWER_REPRESENTOR_H__ */ diff --git a/drivers/net/nfp/flower/nfp_flower_service.c b/drivers/net/nfp/flower/nfp_flower_service.c index 5e8811fe24..515b4abef0 100644 --- a/drivers/net/nfp/flower/nfp_flower_service.c +++ b/drivers/net/nfp/flower/nfp_flower_service.c @@ -28,9 +28,9 @@ struct nfp_flower_service { }; static struct nfp_flower_service * -nfp_flower_service_handle_get(struct nfp_app_fw_flower *app) +nfp_flower_service_handle_get(struct nfp_net_hw_priv *hw_priv) { - return app->pf_hw->pf_dev->process_share.fl_service; + return hw_priv->pf_dev->process_share.fl_service; } static int @@ -100,13 +100,13 @@ nfp_flower_service_insert(struct nfp_app_fw_flower *app, } int -nfp_flower_service_start(void *app_fw_flower) +nfp_flower_service_start(void *app_fw_flower, + struct nfp_net_hw_priv *hw_priv) { int ret; struct nfp_flower_service *service_handle; - struct nfp_app_fw_flower *app = app_fw_flower; - service_handle = nfp_flower_service_handle_get(app); + service_handle = nfp_flower_service_handle_get(hw_priv); if (service_handle == NULL) { PMD_DRV_LOG(ERR, "Can not get service handle"); return -EINVAL; @@ -122,7 +122,7 @@ nfp_flower_service_start(void *app_fw_flower) } /* Insert the NIC to flower service slot */ - ret = nfp_flower_service_insert(app, service_handle); + ret = nfp_flower_service_insert(app_fw_flower, service_handle); if (ret == MAX_FLOWER_SERVICE_SLOT) { PMD_DRV_LOG(ERR, "Flower ctrl vnic service slot over %u", MAX_FLOWER_SERVICE_SLOT); @@ -133,14 +133,14 @@ nfp_flower_service_start(void *app_fw_flower) } void -nfp_flower_service_stop(void *app_fw_flower) +nfp_flower_service_stop(void *app_fw_flower, + struct nfp_net_hw_priv *hw_priv) { uint16_t slot; uint16_t count; struct nfp_flower_service *service_handle; - struct nfp_app_fw_flower *app = app_fw_flower; - service_handle = nfp_flower_service_handle_get(app); + service_handle = nfp_flower_service_handle_get(hw_priv); if (service_handle == NULL) { PMD_DRV_LOG(ERR, "Can not get service handle"); return; @@ -149,7 +149,7 @@ nfp_flower_service_stop(void *app_fw_flower) rte_spinlock_lock(&service_handle->spinlock); for (slot = 0; slot < MAX_FLOWER_SERVICE_SLOT; slot++) { /* The app only in one slot */ - if (service_handle->slots[slot] != app) + if (service_handle->slots[slot] != app_fw_flower) continue; service_handle->slots[slot] = NULL; @@ -157,7 +157,7 @@ nfp_flower_service_stop(void *app_fw_flower) rte_spinlock_unlock(&service_handle->spinlock); /* Determine whether to disable service */ - count = nfp_sync_handle_count_get(app->pf_hw->pf_dev->sync, NULL, + count = nfp_sync_handle_count_get(hw_priv->pf_dev->sync, NULL, service_handle); if (count > 1) return; @@ -167,11 +167,10 @@ nfp_flower_service_stop(void *app_fw_flower) } int -nfp_flower_service_sync_alloc(void *app_fw_flower) +nfp_flower_service_sync_alloc(struct nfp_net_hw_priv *hw_priv) { struct nfp_flower_service *service_handle; - struct nfp_app_fw_flower *app = app_fw_flower; - struct nfp_pf_dev *pf_dev = app->pf_hw->pf_dev; + struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; service_handle = nfp_sync_handle_alloc(pf_dev->sync, NULL, NFP_SYNC_MAGIC_FL_SERVICE, @@ -185,10 +184,9 @@ nfp_flower_service_sync_alloc(void *app_fw_flower) } void -nfp_flower_service_sync_free(void *app_fw_flower) +nfp_flower_service_sync_free(struct nfp_net_hw_priv *hw_priv) { - struct nfp_app_fw_flower *app = app_fw_flower; - struct nfp_pf_dev *pf_dev = app->pf_hw->pf_dev; + struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; nfp_sync_handle_free(pf_dev->sync, NULL, pf_dev->process_share.fl_service); diff --git a/drivers/net/nfp/flower/nfp_flower_service.h b/drivers/net/nfp/flower/nfp_flower_service.h index a75780274f..2fbe4fa601 100644 --- a/drivers/net/nfp/flower/nfp_flower_service.h +++ b/drivers/net/nfp/flower/nfp_flower_service.h @@ -6,12 +6,12 @@ #ifndef __NFP_FLOWER_SERVICE_H__ #define __NFP_FLOWER_SERVICE_H__ -struct nfp_flower_service; +#include "../nfp_net_common.h" -int nfp_flower_service_start(void *app_fw_flower); -void nfp_flower_service_stop(void *app_fw_flower); +int nfp_flower_service_start(void *app_fw_flower, struct nfp_net_hw_priv *hw_priv); +void nfp_flower_service_stop(void *app_fw_flower, struct nfp_net_hw_priv *hw_priv); -int nfp_flower_service_sync_alloc(void *app_fw_flower); -void nfp_flower_service_sync_free(void *app_fw_flower); +int nfp_flower_service_sync_alloc(struct nfp_net_hw_priv *hw_priv); +void nfp_flower_service_sync_free(struct nfp_net_hw_priv *hw_priv); #endif /* __NFP_FLOWER_SERVICE_H__ */ diff --git a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c index 253872f4a1..681a63eacd 100644 --- a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c +++ b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c @@ -469,6 +469,7 @@ nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, nfp_net_reset_tx_queue(txq); txq->hw = hw; + txq->hw_priv = dev->process_private; /* * Telling the HW about the physical address of the TX ring and number diff --git a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c index 41cdfd3a40..83eaec9c24 100644 --- a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c +++ b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c @@ -555,6 +555,7 @@ nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev, dev->data->tx_queues[queue_idx] = txq; txq->hw = hw; + txq->hw_priv = dev->process_private; /* * Telling the HW about the physical address of the TX ring and number diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 98d8e87028..58e155e92b 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -103,12 +103,14 @@ nfp_net_pf_read_mac(struct nfp_app_fw_nic *app_fw_nic, uint16_t port) { struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; struct nfp_eth_table *nfp_eth_table; /* Grab a pointer to the correct physical port */ hw = app_fw_nic->ports[port]; + hw_priv = hw->eth_dev->process_private; - nfp_eth_table = app_fw_nic->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; rte_ether_addr_copy(&nfp_eth_table->ports[port].mac_addr, &hw->super.mac_addr); } @@ -183,8 +185,7 @@ nfp_net_nfp4000_speed_configure_check(uint16_t port_id, } static int -nfp_net_speed_configure(struct rte_eth_dev *dev, - struct nfp_net_hw *net_hw) +nfp_net_speed_configure(struct rte_eth_dev *dev) { int ret; uint32_t speed_capa; @@ -193,11 +194,13 @@ nfp_net_speed_configure(struct rte_eth_dev *dev, uint32_t configure_speed; struct nfp_eth_table_port *eth_port; struct nfp_eth_table *nfp_eth_table; + struct nfp_net_hw *net_hw = dev->data->dev_private; + struct nfp_net_hw_priv *hw_priv = dev->process_private; - nfp_eth_table = net_hw->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; eth_port = &nfp_eth_table->ports[net_hw->idx]; - speed_capa = net_hw->pf_dev->speed_capa; + speed_capa = hw_priv->pf_dev->speed_capa; if (speed_capa == 0) { PMD_DRV_LOG(ERR, "Speed_capa is invalid."); return -EINVAL; @@ -272,12 +275,14 @@ nfp_net_start(struct rte_eth_dev *dev) struct nfp_net_hw *net_hw; struct nfp_pf_dev *pf_dev; struct rte_eth_rxmode *rxmode; + struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); struct rte_intr_handle *intr_handle = pci_dev->intr_handle; net_hw = dev->data->dev_private; - pf_dev = net_hw->pf_dev; + hw_priv = dev->process_private; + pf_dev = hw_priv->pf_dev; app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(pf_dev->app_fw_priv); hw = &net_hw->super; @@ -288,7 +293,7 @@ nfp_net_start(struct rte_eth_dev *dev) nfp_net_enable_queues(dev); /* Configure the port speed and the auto-negotiation mode. */ - ret = nfp_net_speed_configure(dev, net_hw); + ret = nfp_net_speed_configure(dev); if (ret < 0) { PMD_DRV_LOG(ERR, "Failed to set the speed and auto-negotiation mode."); return ret; @@ -400,7 +405,7 @@ nfp_net_start(struct rte_eth_dev *dev) if (rte_eal_process_type() == RTE_PROC_PRIMARY) cpp = net_hw->cpp; else - cpp = ((struct nfp_pf_dev *)(dev->process_private))->cpp; + cpp = pf_dev->cpp; /* Configure the physical port up */ nfp_eth_set_configured(cpp, net_hw->nfp_idx, 1); @@ -437,13 +442,15 @@ nfp_net_set_link_up(struct rte_eth_dev *dev) { struct nfp_cpp *cpp; struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; hw = dev->data->dev_private; + hw_priv = dev->process_private; if (rte_eal_process_type() == RTE_PROC_PRIMARY) cpp = hw->cpp; else - cpp = ((struct nfp_pf_dev *)(dev->process_private))->cpp; + cpp = hw_priv->pf_dev->cpp; return nfp_eth_set_configured(cpp, hw->nfp_idx, 1); } @@ -454,13 +461,15 @@ nfp_net_set_link_down(struct rte_eth_dev *dev) { struct nfp_cpp *cpp; struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; hw = dev->data->dev_private; + hw_priv = dev->process_private; if (rte_eal_process_type() == RTE_PROC_PRIMARY) cpp = hw->cpp; else - cpp = ((struct nfp_pf_dev *)(dev->process_private))->cpp; + cpp = hw_priv->pf_dev->cpp; return nfp_eth_set_configured(cpp, hw->nfp_idx, 0); } @@ -573,11 +582,13 @@ static void nfp_net_uninit(struct rte_eth_dev *eth_dev) { struct nfp_net_hw *net_hw; + struct nfp_net_hw_priv *hw_priv; net_hw = eth_dev->data->dev_private; + hw_priv = eth_dev->process_private; if ((net_hw->super.cap_ext & NFP_NET_CFG_CTRL_FLOW_STEER) != 0) - nfp_net_flow_priv_uninit(net_hw->pf_dev, net_hw->idx); + nfp_net_flow_priv_uninit(hw_priv->pf_dev, net_hw->idx); rte_free(net_hw->eth_xstats_base); if ((net_hw->super.cap & NFP_NET_CFG_CTRL_TXRWB) != 0) @@ -612,8 +623,10 @@ nfp_uninit_app_fw_nic(struct nfp_pf_dev *pf_dev) } void -nfp_pf_uninit(struct nfp_pf_dev *pf_dev) +nfp_pf_uninit(struct nfp_net_hw_priv *hw_priv) { + struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; + nfp_cpp_area_release_free(pf_dev->qc_area); free(pf_dev->sym_tbl); if (pf_dev->multi_pf.enabled) { @@ -626,15 +639,19 @@ nfp_pf_uninit(struct nfp_pf_dev *pf_dev) nfp_cpp_free(pf_dev->cpp); nfp_sync_free(pf_dev->sync); rte_free(pf_dev); + rte_free(hw_priv); } static int -nfp_pf_secondary_uninit(struct nfp_pf_dev *pf_dev) +nfp_pf_secondary_uninit(struct nfp_net_hw_priv *hw_priv) { + struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; + free(pf_dev->sym_tbl); nfp_cpp_free(pf_dev->cpp); nfp_sync_free(pf_dev->sync); rte_free(pf_dev); + rte_free(hw_priv); return 0; } @@ -648,8 +665,11 @@ nfp_net_close(struct rte_eth_dev *dev) struct nfp_net_hw *hw; struct nfp_pf_dev *pf_dev; struct rte_pci_device *pci_dev; + struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; + hw_priv = dev->process_private; + /* * In secondary process, a released eth device can be found by its name * in shared memory. @@ -660,12 +680,12 @@ nfp_net_close(struct rte_eth_dev *dev) if (dev->state == RTE_ETH_DEV_UNUSED) return 0; - nfp_pf_secondary_uninit(dev->process_private); + nfp_pf_secondary_uninit(hw_priv); return 0; } hw = dev->data->dev_private; - pf_dev = hw->pf_dev; + pf_dev = hw_priv->pf_dev; pci_dev = RTE_ETH_DEV_TO_PCI(dev); app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(pf_dev->app_fw_priv); @@ -707,7 +727,7 @@ nfp_net_close(struct rte_eth_dev *dev) nfp_net_dev_interrupt_handler, (void *)dev); nfp_uninit_app_fw_nic(pf_dev); - nfp_pf_uninit(pf_dev); + nfp_pf_uninit(hw_priv); return 0; } @@ -887,13 +907,15 @@ nfp_net_init(struct rte_eth_dev *eth_dev) struct nfp_net_hw *net_hw; struct nfp_pf_dev *pf_dev; struct rte_pci_device *pci_dev; + struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); net_hw = eth_dev->data->dev_private; /* Use backpointer here to the PF of this eth_dev */ - pf_dev = net_hw->pf_dev; + hw_priv = eth_dev->process_private; + pf_dev = hw_priv->pf_dev; /* Use backpointer to the CoreNIC app struct */ app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(pf_dev->app_fw_priv); @@ -915,8 +937,8 @@ nfp_net_init(struct rte_eth_dev *eth_dev) uint32_t min_size; hw->ctrl_bar = pf_dev->ctrl_bar; - min_size = NFP_MAC_STATS_SIZE * net_hw->pf_dev->nfp_eth_table->max_index; - net_hw->mac_stats_bar = nfp_rtsym_map(net_hw->pf_dev->sym_tbl, "_mac_stats", + min_size = NFP_MAC_STATS_SIZE * pf_dev->nfp_eth_table->max_index; + net_hw->mac_stats_bar = nfp_rtsym_map(pf_dev->sym_tbl, "_mac_stats", min_size, &net_hw->mac_stats_area); if (net_hw->mac_stats_bar == NULL) { PMD_INIT_LOG(ERR, "nfp_rtsym_map fails for _mac_stats_bar"); @@ -1472,7 +1494,7 @@ nfp_enable_multi_pf(struct nfp_pf_dev *pf_dev) } static int -nfp_init_app_fw_nic(struct nfp_pf_dev *pf_dev, +nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv, const struct nfp_dev_info *dev_info) { uint8_t i; @@ -1487,6 +1509,7 @@ nfp_init_app_fw_nic(struct nfp_pf_dev *pf_dev, char bar_name[RTE_ETH_NAME_MAX_LEN]; char port_name[RTE_ETH_NAME_MAX_LEN]; char vnic_name[RTE_ETH_NAME_MAX_LEN]; + struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; nfp_eth_table = pf_dev->nfp_eth_table; PMD_INIT_LOG(INFO, "Total physical ports: %d", nfp_eth_table->count); @@ -1529,7 +1552,6 @@ nfp_init_app_fw_nic(struct nfp_pf_dev *pf_dev, /* Populate coreNIC app properties */ app_fw_nic->total_phyports = total_vnics; - app_fw_nic->pf_dev = pf_dev; if (total_vnics > 1) app_fw_nic->multiport = true; @@ -1580,13 +1602,13 @@ nfp_init_app_fw_nic(struct nfp_pf_dev *pf_dev, app_fw_nic->ports[id] = hw; hw->dev_info = dev_info; - hw->pf_dev = pf_dev; hw->cpp = pf_dev->cpp; hw->eth_dev = eth_dev; hw->idx = id; hw->nfp_idx = nfp_eth_table->ports[id].index; eth_dev->device = &pf_dev->pci_dev->device; + eth_dev->process_private = hw_priv; /* * Ctrl/tx/rx BAR mappings and remaining init happens in @@ -1792,6 +1814,7 @@ nfp_pf_init(struct rte_pci_device *pci_dev) enum nfp_app_fw_id app_fw_id; char name[RTE_ETH_NAME_MAX_LEN]; struct nfp_rtsym_table *sym_tbl; + struct nfp_net_hw_priv *hw_priv; char app_name[RTE_ETH_NAME_MAX_LEN]; struct nfp_eth_table *nfp_eth_table; const struct nfp_dev_info *dev_info; @@ -1810,13 +1833,20 @@ nfp_pf_init(struct rte_pci_device *pci_dev) return -ENODEV; } + hw_priv = rte_zmalloc(NULL, sizeof(*hw_priv), 0); + if (hw_priv == NULL) { + PMD_INIT_LOG(ERR, "Can not alloc memory for hw priv data"); + return -ENOMEM; + } + /* Allocate memory for the PF "device" */ function_id = (pci_dev->addr.function) & 0x07; snprintf(name, sizeof(name), "nfp_pf%u", function_id); pf_dev = rte_zmalloc(name, sizeof(*pf_dev), 0); if (pf_dev == NULL) { PMD_INIT_LOG(ERR, "Can't allocate memory for the PF device"); - return -ENOMEM; + ret = -ENOMEM; + goto hw_priv_free; } sync = nfp_sync_alloc(); @@ -1937,6 +1967,8 @@ nfp_pf_init(struct rte_pci_device *pci_dev) PMD_INIT_LOG(DEBUG, "qc_bar address: %p", pf_dev->qc_bar); + hw_priv->pf_dev = pf_dev; + /* * PF initialization has been done at this point. Call app specific * init code now. @@ -1950,7 +1982,7 @@ nfp_pf_init(struct rte_pci_device *pci_dev) } PMD_INIT_LOG(INFO, "Initializing coreNIC"); - ret = nfp_init_app_fw_nic(pf_dev, dev_info); + ret = nfp_init_app_fw_nic(hw_priv, dev_info); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize coreNIC!"); goto hwqueues_cleanup; @@ -1958,7 +1990,7 @@ nfp_pf_init(struct rte_pci_device *pci_dev) break; case NFP_APP_FW_FLOWER_NIC: PMD_INIT_LOG(INFO, "Initializing Flower"); - ret = nfp_init_app_fw_flower(pf_dev, dev_info); + ret = nfp_init_app_fw_flower(hw_priv, dev_info); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize Flower!"); goto hwqueues_cleanup; @@ -1996,12 +2028,14 @@ nfp_pf_init(struct rte_pci_device *pci_dev) nfp_sync_free(sync); pf_cleanup: rte_free(pf_dev); +hw_priv_free: + rte_free(hw_priv); return ret; } static int -nfp_secondary_init_app_fw_nic(struct nfp_pf_dev *pf_dev) +nfp_secondary_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) { uint32_t i; int err = 0; @@ -2010,6 +2044,7 @@ nfp_secondary_init_app_fw_nic(struct nfp_pf_dev *pf_dev) uint32_t total_vnics; struct nfp_net_hw *hw; char pf_name[RTE_ETH_NAME_MAX_LEN]; + struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; /* Read the number of vNIC's created for the PF */ function_id = (pf_dev->pci_dev->addr.function) & 0x07; @@ -2039,7 +2074,7 @@ nfp_secondary_init_app_fw_nic(struct nfp_pf_dev *pf_dev) break; } - eth_dev->process_private = pf_dev; + eth_dev->process_private = hw_priv; hw = eth_dev->data->dev_private; nfp_net_ethdev_ops_mount(hw, eth_dev); @@ -2065,6 +2100,7 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) enum nfp_app_fw_id app_fw_id; char name[RTE_ETH_NAME_MAX_LEN]; struct nfp_rtsym_table *sym_tbl; + struct nfp_net_hw_priv *hw_priv; const struct nfp_dev_info *dev_info; char app_name[RTE_ETH_NAME_MAX_LEN]; @@ -2082,12 +2118,19 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) return -ENODEV; } + hw_priv = rte_zmalloc(NULL, sizeof(*hw_priv), 0); + if (hw_priv == NULL) { + PMD_INIT_LOG(ERR, "Can not alloc memory for hw priv data"); + return -ENOMEM; + } + /* Allocate memory for the PF "device" */ snprintf(name, sizeof(name), "nfp_pf%d", 0); pf_dev = rte_zmalloc(name, sizeof(*pf_dev), 0); if (pf_dev == NULL) { PMD_INIT_LOG(ERR, "Can't allocate memory for the PF device"); - return -ENOMEM; + ret = -ENOMEM; + goto hw_priv_free; } sync = nfp_sync_alloc(); @@ -2143,11 +2186,13 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) pf_dev->pci_dev = pci_dev; pf_dev->sync = sync; + hw_priv->pf_dev = pf_dev; + /* Call app specific init code now */ switch (app_fw_id) { case NFP_APP_FW_CORE_NIC: PMD_INIT_LOG(INFO, "Initializing coreNIC"); - ret = nfp_secondary_init_app_fw_nic(pf_dev); + ret = nfp_secondary_init_app_fw_nic(hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize coreNIC!"); goto sym_tbl_cleanup; @@ -2155,7 +2200,7 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) break; case NFP_APP_FW_FLOWER_NIC: PMD_INIT_LOG(INFO, "Initializing Flower"); - ret = nfp_secondary_init_app_fw_flower(pf_dev); + ret = nfp_secondary_init_app_fw_flower(hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize Flower!"); goto sym_tbl_cleanup; @@ -2177,6 +2222,8 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) nfp_sync_free(sync); pf_cleanup: rte_free(pf_dev); +hw_priv_free: + rte_free(hw_priv); return ret; } diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index da1a7e7be1..60d77b6178 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -685,6 +685,7 @@ nfp_net_allmulticast_disable(struct rte_eth_dev *dev) static int nfp_net_speed_aneg_update(struct rte_eth_dev *dev, struct nfp_net_hw *hw, + struct nfp_net_hw_priv *hw_priv, struct rte_eth_link *link) { uint32_t i; @@ -700,11 +701,11 @@ nfp_net_speed_aneg_update(struct rte_eth_dev *dev, return -EIO; } - hw->pf_dev->nfp_eth_table->ports[hw->idx] = nfp_eth_table->ports[hw->idx]; + hw_priv->pf_dev->nfp_eth_table->ports[hw->idx] = nfp_eth_table->ports[hw->idx]; free(nfp_eth_table); } - nfp_eth_table = hw->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; eth_port = &nfp_eth_table->ports[hw->idx]; speed = eth_port->speed; @@ -730,10 +731,12 @@ nfp_net_link_update_common(struct rte_eth_dev *dev, { int ret; uint32_t nn_link_status; + struct nfp_net_hw_priv *hw_priv; + hw_priv = dev->process_private; if (link->link_status == RTE_ETH_LINK_UP) { - if (hw->pf_dev != NULL) { - ret = nfp_net_speed_aneg_update(dev, hw, link); + if (hw_priv->pf_dev != NULL) { + ret = nfp_net_speed_aneg_update(dev, hw, hw_priv, link); if (ret != 0) { PMD_DRV_LOG(DEBUG, "Failed to update speed and aneg."); return ret; @@ -775,8 +778,10 @@ nfp_net_link_update(struct rte_eth_dev *dev, struct nfp_net_hw *hw; uint32_t nn_link_status; struct rte_eth_link link; + struct nfp_net_hw_priv *hw_priv; hw = nfp_net_get_hw(dev); + hw_priv = dev->process_private; memset(&link, 0, sizeof(struct rte_eth_link)); @@ -796,7 +801,7 @@ nfp_net_link_update(struct rte_eth_dev *dev, * Not applicable for VFs as the associated PF is still attached to the * kernel driver. */ - if (hw->pf_dev != NULL) + if (hw_priv != NULL && hw_priv->pf_dev != NULL) nfp_net_notify_port_speed(hw, &link); return ret; @@ -1173,8 +1178,10 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) uint16_t min_tx_desc; uint16_t max_tx_desc; struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; hw = nfp_net_get_hw(dev); + hw_priv = dev->process_private; nfp_net_rx_desc_limits(hw, &min_rx_desc, &max_rx_desc); nfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc); @@ -1274,8 +1281,8 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) } /* Only PF supports getting speed capability. */ - if (hw->pf_dev != NULL) - dev_info->speed_capa = hw->pf_dev->speed_capa; + if (hw_priv != NULL && hw_priv->pf_dev != NULL) + dev_info->speed_capa = hw_priv->pf_dev->speed_capa; return 0; } @@ -2135,10 +2142,10 @@ nfp_net_get_mip_name(struct nfp_net_hw *hw, } static void -nfp_net_get_app_name(struct nfp_net_hw *hw, +nfp_net_get_app_name(struct nfp_net_hw_priv *hw_priv, char *app_name) { - switch (hw->pf_dev->app_fw_id) { + switch (hw_priv->pf_dev->app_fw_id) { case NFP_APP_FW_CORE_NIC: snprintf(app_name, FW_VER_LEN, "%s", "nic"); break; @@ -2161,11 +2168,13 @@ nfp_net_firmware_version_get(struct rte_eth_dev *dev, char app_name[FW_VER_LEN]; char nsp_version[FW_VER_LEN]; char vnic_version[FW_VER_LEN]; + struct nfp_net_hw_priv *hw_priv; if (fw_size < FW_VER_LEN) return FW_VER_LEN; hw = nfp_net_get_hw(dev); + hw_priv = dev->process_private; if (!rte_eth_dev_is_repr(dev)) { snprintf(vnic_version, FW_VER_LEN, "%d.%d.%d.%d", @@ -2177,7 +2186,7 @@ nfp_net_firmware_version_get(struct rte_eth_dev *dev, nfp_net_get_nsp_info(hw, nsp_version); nfp_net_get_mip_name(hw, mip_name); - nfp_net_get_app_name(hw, app_name); + nfp_net_get_app_name(hw_priv, app_name); snprintf(fw_version, FW_VER_LEN, "%s %s %s %s", vnic_version, nsp_version, mip_name, app_name); @@ -2212,8 +2221,10 @@ nfp_net_stop(struct rte_eth_dev *dev) { struct nfp_cpp *cpp; struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; hw = nfp_net_get_hw(dev); + hw_priv = dev->process_private; nfp_net_disable_queues(dev); @@ -2224,7 +2235,7 @@ nfp_net_stop(struct rte_eth_dev *dev) if (rte_eal_process_type() == RTE_PROC_PRIMARY) cpp = hw->cpp; else - cpp = ((struct nfp_pf_dev *)(dev->process_private))->cpp; + cpp = hw_priv->pf_dev->cpp; nfp_eth_set_configured(cpp, hw->nfp_idx, 0); @@ -2255,15 +2266,15 @@ int nfp_net_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) { - struct nfp_net_hw *net_hw; + struct nfp_net_hw_priv *hw_priv; struct nfp_eth_table *nfp_eth_table; struct nfp_eth_table_port *eth_port; - net_hw = nfp_net_get_hw(dev); - if (net_hw->pf_dev == NULL) + hw_priv = dev->process_private; + if (hw_priv == NULL || hw_priv->pf_dev == NULL) return -EINVAL; - nfp_eth_table = net_hw->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; eth_port = &nfp_eth_table->ports[dev->data->port_id]; /* Currently only RX/TX switch are supported */ @@ -2319,15 +2330,17 @@ nfp_net_flow_ctrl_set(struct rte_eth_dev *dev, int ret; struct nfp_net_hw *net_hw; enum rte_eth_fc_mode set_mode; + struct nfp_net_hw_priv *hw_priv; enum rte_eth_fc_mode original_mode; struct nfp_eth_table *nfp_eth_table; struct nfp_eth_table_port *eth_port; net_hw = nfp_net_get_hw(dev); - if (net_hw->pf_dev == NULL) + hw_priv = dev->process_private; + if (hw_priv == NULL || hw_priv->pf_dev == NULL) return -EINVAL; - nfp_eth_table = net_hw->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; eth_port = &nfp_eth_table->ports[net_hw->idx]; original_mode = nfp_net_get_pause_mode(eth_port); @@ -2355,14 +2368,16 @@ nfp_net_fec_get_capability(struct rte_eth_dev *dev, uint16_t speed; struct nfp_net_hw *hw; uint32_t supported_fec; + struct nfp_net_hw_priv *hw_priv; struct nfp_eth_table *nfp_eth_table; struct nfp_eth_table_port *eth_port; hw = nfp_net_get_hw(dev); - if (hw->pf_dev == NULL) + hw_priv = dev->process_private; + if (hw_priv == NULL || hw_priv->pf_dev == NULL) return -EINVAL; - nfp_eth_table = hw->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; eth_port = &nfp_eth_table->ports[hw->idx]; speed = eth_port->speed; @@ -2412,20 +2427,22 @@ nfp_net_fec_get(struct rte_eth_dev *dev, uint32_t *fec_capa) { struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; struct nfp_eth_table *nfp_eth_table; struct nfp_eth_table_port *eth_port; hw = nfp_net_get_hw(dev); - if (hw->pf_dev == NULL) + hw_priv = dev->process_private; + if (hw_priv == NULL || hw_priv->pf_dev == NULL) return -EINVAL; if (dev->data->dev_link.link_status == RTE_ETH_LINK_DOWN) { nfp_eth_table = nfp_eth_read_ports(hw->cpp); - hw->pf_dev->nfp_eth_table->ports[hw->idx] = nfp_eth_table->ports[hw->idx]; + hw_priv->pf_dev->nfp_eth_table->ports[hw->idx] = nfp_eth_table->ports[hw->idx]; free(nfp_eth_table); } - nfp_eth_table = hw->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; eth_port = &nfp_eth_table->ports[hw->idx]; if (!nfp_eth_can_support_fec(eth_port)) { @@ -2473,14 +2490,16 @@ nfp_net_fec_set(struct rte_eth_dev *dev, enum nfp_eth_fec fec; struct nfp_net_hw *hw; uint32_t supported_fec; + struct nfp_net_hw_priv *hw_priv; struct nfp_eth_table *nfp_eth_table; struct nfp_eth_table_port *eth_port; hw = nfp_net_get_hw(dev); - if (hw->pf_dev == NULL) + hw_priv = dev->process_private; + if (hw_priv == NULL || hw_priv->pf_dev == NULL) return -EINVAL; - nfp_eth_table = hw->pf_dev->nfp_eth_table; + nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; eth_port = &nfp_eth_table->ports[hw->idx]; supported_fec = nfp_eth_supported_fec_modes(eth_port); diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 8066e77e6f..8dbe2fb973 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -12,7 +12,6 @@ #include #include -#include "flower/nfp_flower_service.h" #include "nfpcore/nfp_sync.h" #include "nfp_net_ctrl.h" #include "nfp_service.h" @@ -86,6 +85,8 @@ struct nfp_multi_pf { uint8_t *beat_addr; }; +struct nfp_flower_service; + struct nfp_process_share { struct nfp_flower_service *fl_service; }; @@ -145,9 +146,6 @@ struct nfp_net_priv { }; struct nfp_app_fw_nic { - /** Backpointer to the PF device */ - struct nfp_pf_dev *pf_dev; - /** * Array of physical ports belonging to this CoreNIC app. * This is really a list of vNIC's, one for each physical port. @@ -158,13 +156,14 @@ struct nfp_app_fw_nic { uint8_t total_phyports; }; +struct nfp_net_hw_priv { + struct nfp_pf_dev *pf_dev; +}; + struct nfp_net_hw { /** The parent class */ struct nfp_hw super; - /** Backpointer to the PF this port belongs to */ - struct nfp_pf_dev *pf_dev; - /** Backpointer to the eth_dev of this port */ struct rte_eth_dev *eth_dev; @@ -314,7 +313,7 @@ int nfp_net_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf); int nfp_net_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf); -void nfp_pf_uninit(struct nfp_pf_dev *pf_dev); +void nfp_pf_uninit(struct nfp_net_hw_priv *hw_priv); int nfp_net_fec_get_capability(struct rte_eth_dev *dev, struct rte_eth_fec_capa *speed_fec_capa, unsigned int num); diff --git a/drivers/net/nfp/nfp_net_flow.c b/drivers/net/nfp/nfp_net_flow.c index ea743eed73..b0d1a57d99 100644 --- a/drivers/net/nfp/nfp_net_flow.c +++ b/drivers/net/nfp/nfp_net_flow.c @@ -658,10 +658,12 @@ nfp_net_flow_setup(struct rte_eth_dev *dev, struct nfp_net_priv *priv; struct rte_flow *nfp_flow; struct rte_flow *flow_find; + struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; hw = dev->data->dev_private; - app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw->pf_dev->app_fw_priv); + hw_priv = dev->process_private; + app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw_priv->pf_dev->app_fw_priv); priv = app_fw_nic->ports[hw->idx]->priv; ret = nfp_net_flow_calculate_items(items, &match_len); @@ -775,10 +777,12 @@ nfp_net_flow_validate(struct rte_eth_dev *dev, struct nfp_net_hw *hw; struct rte_flow *nfp_flow; struct nfp_net_priv *priv; + struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; hw = dev->data->dev_private; - app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw->pf_dev->app_fw_priv); + hw_priv = dev->process_private; + app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw_priv->pf_dev->app_fw_priv); priv = app_fw_nic->ports[hw->idx]->priv; nfp_flow = nfp_net_flow_setup(dev, attr, items, actions); @@ -811,10 +815,12 @@ nfp_net_flow_create(struct rte_eth_dev *dev, struct nfp_net_hw *hw; struct rte_flow *nfp_flow; struct nfp_net_priv *priv; + struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; hw = dev->data->dev_private; - app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw->pf_dev->app_fw_priv); + hw_priv = dev->process_private; + app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw_priv->pf_dev->app_fw_priv); priv = app_fw_nic->ports[hw->idx]->priv; nfp_flow = nfp_net_flow_setup(dev, attr, items, actions); @@ -861,10 +867,12 @@ nfp_net_flow_destroy(struct rte_eth_dev *dev, struct nfp_net_hw *hw; struct nfp_net_priv *priv; struct rte_flow *flow_find; + struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; hw = dev->data->dev_private; - app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw->pf_dev->app_fw_priv); + hw_priv = dev->process_private; + app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw_priv->pf_dev->app_fw_priv); priv = app_fw_nic->ports[hw->idx]->priv; /* Find the flow in flow hash table */ @@ -920,10 +928,12 @@ nfp_net_flow_flush(struct rte_eth_dev *dev, struct nfp_net_hw *hw; struct rte_flow *nfp_flow; struct rte_hash *flow_table; + struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; hw = dev->data->dev_private; - app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw->pf_dev->app_fw_priv); + hw_priv = dev->process_private; + app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(hw_priv->pf_dev->app_fw_priv); flow_table = app_fw_nic->ports[hw->idx]->priv->flow_table; while (rte_hash_iterate(flow_table, &next_key, &next_data, &iter) >= 0) { diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index f9c4636688..12f362a4f4 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -418,6 +418,7 @@ nfp_net_recv_pkts(void *rx_queue, struct nfp_net_dp_buf *rxb; struct nfp_net_rx_desc *rxds; uint16_t avail_multiplexed = 0; + struct nfp_net_hw_priv *hw_priv; rxq = rx_queue; if (unlikely(rxq == NULL)) { @@ -430,6 +431,7 @@ nfp_net_recv_pkts(void *rx_queue, } hw = rxq->hw; + hw_priv = rxq->hw_priv; while (avail + avail_multiplexed < nb_pkts) { rxb = &rxq->rxbufs[rxq->rd_p]; @@ -520,7 +522,7 @@ nfp_net_recv_pkts(void *rx_queue, if (((meta.flags >> NFP_NET_META_PORTID) & 0x1) == 0) { rx_pkts[avail++] = mb; - } else if (nfp_flower_pf_dispatch_pkts(hw, mb, meta.port_id)) { + } else if (nfp_flower_pf_dispatch_pkts(hw_priv, mb, meta.port_id)) { avail_multiplexed++; } else { rte_pktmbuf_free(mb); @@ -684,6 +686,7 @@ nfp_net_rx_queue_setup(struct rte_eth_dev *dev, nfp_net_reset_rx_queue(rxq); rxq->hw = hw; + rxq->hw_priv = dev->process_private; /* * Telling the HW about the physical address of the RX ring and number diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h index 0aa73a6432..8cd3649882 100644 --- a/drivers/net/nfp/nfp_rxtx.h +++ b/drivers/net/nfp/nfp_rxtx.h @@ -30,6 +30,7 @@ struct nfp_tx_ipsec_desc_msg { struct nfp_net_txq { /** Backpointer to nfp_net structure */ struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; /** * For each descriptor keep a reference to the mbuf and @@ -69,8 +70,8 @@ struct nfp_net_txq { uint16_t data_pending; /** - * At this point 50 bytes have been used for all the fields in the - * TX critical path. We have room for 14 bytes and still all placed + * At this point 58 bytes have been used for all the fields in the + * TX critical path. We have room for 6 bytes and still all placed * in a cache line. */ uint64_t dma; @@ -138,6 +139,7 @@ struct nfp_net_rx_desc { struct nfp_net_rxq { /** Backpointer to nfp_net structure */ struct nfp_net_hw *hw; + struct nfp_net_hw_priv *hw_priv; /** * Point to the base addresses of the freelist queue @@ -188,8 +190,8 @@ struct nfp_net_rxq { uint16_t qidx; /** - * At this point 54 bytes have been used for all the fields in the - * RX critical path. We have room for 10 bytes and still all placed + * At this point 62 bytes have been used for all the fields in the + * RX critical path. We have room for 2 bytes and still all placed * in a cache line. */ From patchwork Fri Apr 19 03:12:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 139520 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 C9E1A43EA9; Fri, 19 Apr 2024 05:13:34 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 18796406BA; Fri, 19 Apr 2024 05:13:04 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2111.outbound.protection.outlook.com [40.107.237.111]) by mails.dpdk.org (Postfix) with ESMTP id 655A64067E for ; Fri, 19 Apr 2024 05:13:01 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ph9acroyYBtpFj0gUej81++F2AF2YYtDCbXhJIgL9yxLPIebhAV+YndOMv5ZGoBGkB0KZDmF7bbeBFn06In1b+Ccv6gJxzKF7HeE1vAx/O0laGvM4LvDm7G7nAF7gdECyG7oraoNpt7Lhtuj/iH6FhnOJWD7XgNQoZltvT+MCxJFOS7ge7srq9nfmW4aN+nNQLmF5x7hvntUiz22/wl8a6vdUZcGHNN2jfKtAH40q3Z8v2S64NfbuRx8r9SPaZMmOn4DNT8XeySZ/pqeTu4Pncc+6NIKugGfMgpJY1KBcumrG1rXx4LaEGxgNIghvgRRu2cGEZsk7gcLmwMKbotVuA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=6umlQCIyGYJ8c80kBSBBWdu6EELI0REgjh+jzujRZqQ=; b=dPfPMVcCgHrxfmUwQlCTbyPfPheOO2YU18Duofc4pt6/knPksr1VjE8cdnIuAOPzuM3CEsZk7uHixmqXJ98wUPxV1DljBt/rLsEGZ8ZXi88gUkAWOHTC2KjEO6lLRfFjLiElZaYrTlllQjZ5KuHNuTEFG9mbFNGjkayC1ZAFfnqPkMxQO5m0YTpJ1tplVxeZVMr3cv6XGdrPEcKmLulQ+OpggenpMeaaLZBNxtZwmP7dsbnWLyXNab02eG+lVleGcCqNYGyc3VLnTilmi8kvs2++nZ96J8t1uh7qgYwKowhraJlTVFNT/gYVU+MLr91DRfE0vLnoJMmCjoJHAGPSkw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6umlQCIyGYJ8c80kBSBBWdu6EELI0REgjh+jzujRZqQ=; b=rz7W43na2sn4U3nScQSUPjcqbvD86ttrtsJPb9AyyAiAdYq11RnE4e5uKI6TmSf6vegmulTt0fPhvu8whuF0xjaVtbYxBuQsPa+Ttffc4aSGkb/ecBwt3vQt+f/b8SjzBFhJpXj1MMDs0Hu0aX5rsjM8FSly4oILa3niczoffn0= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY1PR13MB6310.namprd13.prod.outlook.com (2603:10b6:a03:52e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.38; Fri, 19 Apr 2024 03:13:00 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024 03:13:00 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH 5/8] net/nfp: move device info data field Date: Fri, 19 Apr 2024 11:12:23 +0800 Message-Id: <20240419031226.1191069-6-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240419031226.1191069-1-chaoyong.he@corigine.com> References: <20240419031226.1191069-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0044.apcprd01.prod.exchangelabs.com (2603:1096:4:193::8) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY1PR13MB6310:EE_ X-MS-Office365-Filtering-Correlation-Id: 4d51c469-a246-446a-d63c-08dc601e9e21 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dKrs7ga/GPAPuUmdQ5Vr3eBHj+0rJNPptjjxPjRTrmdyP7D0RGNtJ4osO4f9lQM4hDvtc4gnErIdSxRiOA/XBfjg5UFEJAA4XKjME3OOrs7Ga1MwWwEWkpFfiw6Y7ceKV4LX/r4NxKYmOg4TxqvOsAuIBioJst+qRZP4VtkeTX8Uqx37iK11+H5HWr1fyJmsCUChUwfFCX3+jQY4vn0pE/UHXvGg6VEFYWRPDRsbUdZJSGUK/n0MSf636bT34pDiT0UJpOw4FnHs8jqy/ZuU0iplWhD6AYLxWqRSPOWgjct36G7jdvFjjdAUgnSdV7Z47JzBkYZWh2zFUFWTCLrMXV6USXMG3jOVs2aPg55l1p9eda2uGh8/X5kcrlr15qaaSR2aWPAZA4qdQUnQERTHCSvhW+TtGoZZGRUmVwjTTsuziIgOOxoBpV2AkMgPyPwF9gujk+q0xFoQ2jpmB4pHv78Kza2cm4OMLMhWdVhzh9YUEVxvsPc/BkPuqXWR/ihJdkBGofLaLHGlKHZeujAhZgS7vAtL9D9x6cHdMTCfy0GBjnb08ZVMV3cglfvMTttChkZqpABGNM9DslaA9M5JR2+UvFfDRD/N9BbY2jypyTBY38s6dB5wRljQfWPzYmsbMxLcdz0t3FoIxSc3U7BHnYGBOgWFFGy5WliUMIgi23iStHsB3GxIWhIVjHYIcA47AsMv+amL507O8laRA1duvxareCH9aVAIrqw9cVH69diF/NfqxDiW7bZ2IMKktYUPc+AKPdtiABbmEn2V6K1KO31XfieO1oWbyW8/4nxxJV+WT71qdTvoTnjHVNo21nxJ1fk0pCWchWnEdCtaJ4Dwps9v8hKxWqsKE4ZB1RAwc3sy2qqZt00DUMloo9emHGNlUfYb/K7qIeHNY+PrnooffLmPYl4pkQ3D+7qVKQLkobbbTKdQzuXRUrfAtPHqRGWZEk3yf9iyKxT06Vnelw3QQy5SNnNwbAgvW/knHvtKt0Y2lTCYJwLWWwsU3kvLmYr4EUNQjdBZj9mceO7PocisTbMCE/tHeKGb9E5vw6kxCkm9H3EDRZpPS3mUV3ch41/NyETN1wRqiFrIYLCUum5HSQqDty9hf1cZfRgcIyuaKAv/az8RD3k2qALRsCF4zT4Qz6tB9TUcmHZBDV8SfEUeFBlkRXJqsfdpmJmaQ0t/QnXhcYJRac2ETYGkKwa3QN9Gqd8YgGxRr6O62rExw/MfzYS4xeaEisAhrMnd1zd7p3NraDpeV6ApUVUX1huLpOx1YUgccK4SjFmBblD6h53jldKaRf5Kv9eWVv0bw5ZUf26eBgmTv9yOlQgd5JxkriLdhV76nJoNiJF1Rb9VsfoTGA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(52116005)(376005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 3wugR1DWJJzZWqeq22gmSFRsObsCJLyMnHL/NOofDedT+p4w9+8dX+wsCrBGZbz67iJ7QwHLTCl0qHUcNzm13r9/IN0NEX11S4Q01t+o6rTiraaA6mWp3xdQe1W/ZZShMc2tUfs3ynTLhurlvfcf7JDkNPTqUZlvttagLk72MJXxmfSwLGsGDz9lbTZ5Xow34gMJGuzroTZzI1+hXp0z+EpPY5lntb+5iGH/+0oBTu212YMuMNCzkAJDagFMFYdu83YXe/a42YUhrWU6bUMf4IwdzSMpJWC7Ni/+RC8zHezJn7CL6Z1aIk2aeibaVq7OzQmGt50OmF6Ydo5h6iVzwjXHoiyyqpOwWOIJrNJ1SHS6lLZKyOwFdlpmdg2/FAEZ2Qz+Lqk7veYppal1pn8rshDWOEFtOMJdzMbp6ZlyGcVJkwSVzzhpvJz3ZMW4OlJN+Qu1Shanhryu3FobiCLiPTvVEpyuyVqwW33uQorjxbTSe5Bn+3E/bCVyMRH4zqLjRL8b3NaoAzxgPlCtfjARyrU7aUlc/3haZSOG8Av6BqLyd6fMzrlb9YV35nkr1uj3XYpZ1kv8PCs428PszwXh5ey3fSQGLY13ifbJ3xveuHFQwnXYgYyfEDfkqmMkaEGrj3rYKxNL8nC+FzPNK6GGWAUbqF5raF5k1AZz5cPVsHqSUXJYjZafWFuG87Qf9hxw5T4c/2/O1tR4lC7ihJgIj26/P2FQDfJrASRudqWedV+epMcgKz5ODfS6RX8Obef9B18OXfQGZUqO8QP1OYZ7eXcEtSEPO3sgfSVKEK3EB7qymDv3wc9i3xOIBgM4ssNmmGaXMLro6Mh0kYHLZpL1LwzFjzbiY76liQ8mJIa4YSwboGWUdkUZQaXJr9sIdR/Ew1GTdm2q48iSXAWl9M1+QbJ6AQCmHo4TtSLq98+t7I4R/x+GYFgIdJn5VZsFYNPw4cWFl+8CQw0pgGkj0shNKZgPePxM6hN01NwQXPOYKlp7hZWaX62v+Nz/lMh2H4zL6mLidnERiFoSpGpnjbiz355EnsgUUCQeEgDjpNblAKWcj35lOgOScrOabOVZOVtoipJvPot0bt3EIFOz8rEoc9P0ozKAPgmbNTc8LIUr2hEYBVPtYYEvJUnH73Ysz2HPA6+FSYVopnOjoJJCt0zLydeqYB4YM+SQVU27mTXr00DtdioqMWQlGy21rmEGz/6i6bs8g7cjdFGw2k/NaedLiNMHwS+XgXSBEs3lrTgZmeeFqDi7bgwElNKZdJzNhm8TtJFRmDC5D1Y4klFjq5vITPTztkqVJH+tOENEfLdNbq/d31U7L9R0COZ7YfN4uQ7u8utUCefF8y9WLksEWXlF1UsUeQxWjYPVIQ8338fPWI7mSZzE35+S/IpMLi6av+2NDb56Bar/wWVKLJjytlm6kcTynsgc4wyCac8V+lQieg24RRToB7T77DRQD9geOj+Fxz8eUn8RzTBK/45lSX0j7fsMxPV9DrF8CFeqh8SEaie7gkU2Sx3aerQ/uijqSVBRzA+Oy+VVR7+PRqdH+tGFe3lxvQkJlBENM4Nu2dFZ4J8C4aBI8DiIMg1UCdhHQpv4FiuivlGMc/1fqzC5iepZ4Q== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4d51c469-a246-446a-d63c-08dc601e9e21 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 03:13:00.1032 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 2PuLXXdFaNRrBGsD5wkwEE/H5d7bmtEQ5o6iCA0zAhMGGqZHt/q1dR3vedbqELvRxVrsxd3Zj1ZByr8lLHMrP1rI1Om34DEeAdR8+Dpz/9U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR13MB6310 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 Move 'dev_info' data field from process shared data structure into process private data structure. Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/flower/nfp_flower.c | 9 +++------ drivers/net/nfp/flower/nfp_flower.h | 3 +-- drivers/net/nfp/nfd3/nfp_nfd3_dp.c | 4 +++- drivers/net/nfp/nfdk/nfp_nfdk_dp.c | 4 +++- drivers/net/nfp/nfp_ethdev.c | 10 +++++----- drivers/net/nfp/nfp_ethdev_vf.c | 18 +++++++++++++++++- drivers/net/nfp/nfp_net_common.c | 15 ++++++++------- drivers/net/nfp/nfp_net_common.h | 9 +++++---- drivers/net/nfp/nfp_rxtx.c | 4 +++- 9 files changed, 48 insertions(+), 28 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index efa604fd58..41678c93b5 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -372,7 +372,7 @@ nfp_flower_init_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower, */ tz = rte_eth_dma_zone_reserve(eth_dev, ctrl_rxring_name, i, sizeof(struct nfp_net_rx_desc) * - hw->dev_info->max_qc_size, + hw_priv->dev_info->max_qc_size, NFP_MEMZONE_ALIGN, numa_node); if (tz == NULL) { PMD_DRV_LOG(ERR, "Error allocating rx dma"); @@ -430,7 +430,7 @@ nfp_flower_init_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower, */ tz = rte_eth_dma_zone_reserve(eth_dev, ctrl_txring_name, i, sizeof(struct nfp_net_nfd3_tx_desc) * - hw->dev_info->max_qc_size, + hw_priv->dev_info->max_qc_size, NFP_MEMZONE_ALIGN, numa_node); if (tz == NULL) { PMD_DRV_LOG(ERR, "Error allocating tx dma"); @@ -639,8 +639,7 @@ nfp_flower_nfd_func_register(struct nfp_app_fw_flower *app_fw_flower) } int -nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv, - const struct nfp_dev_info *dev_info) +nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv) { int ret; int err; @@ -709,7 +708,6 @@ nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv, app_fw_flower->pf_hw = pf_hw; pf_hw->super.ctrl_bar = pf_dev->ctrl_bar; pf_hw->cpp = pf_dev->cpp; - pf_hw->dev_info = dev_info; ret = nfp_flower_init_vnic_common(hw_priv, pf_hw, "pf_vnic"); if (ret != 0) { @@ -734,7 +732,6 @@ nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv, /* Now populate the ctrl vNIC */ ctrl_hw->cpp = pf_dev->cpp; - ctrl_hw->dev_info = dev_info; ret = nfp_flower_init_ctrl_vnic(app_fw_flower, hw_priv); if (ret != 0) { diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index 5cc29dcc87..5c2f338a20 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -104,8 +104,7 @@ nfp_flower_support_decap_v2(const struct nfp_app_fw_flower *app_fw_flower) return app_fw_flower->ext_features & NFP_FL_FEATS_DECAP_V2; } -int nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv, - const struct nfp_dev_info *dev_info); +int nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv); void nfp_uninit_app_fw_flower(struct nfp_net_hw_priv *hw_priv); int nfp_secondary_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv); bool nfp_flower_pf_dispatch_pkts(struct nfp_net_hw_priv *hw_priv, diff --git a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c index 681a63eacd..ee96cd8e46 100644 --- a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c +++ b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c @@ -385,10 +385,12 @@ nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, struct nfp_net_txq *txq; uint16_t tx_free_thresh; const struct rte_memzone *tz; + struct nfp_net_hw_priv *hw_priv; hw = nfp_net_get_hw(dev); + hw_priv = dev->process_private; - nfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc); + nfp_net_tx_desc_limits(hw, hw_priv, &min_tx_desc, &max_tx_desc); /* Validating number of descriptors */ tx_desc_sz = nb_desc * sizeof(struct nfp_net_nfd3_tx_desc); diff --git a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c index 83eaec9c24..3ba97e23a9 100644 --- a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c +++ b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c @@ -464,10 +464,12 @@ nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_free_thresh; struct nfp_net_txq *txq; const struct rte_memzone *tz; + struct nfp_net_hw_priv *hw_priv; hw = nfp_net_get_hw(dev); + hw_priv = dev->process_private; - nfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc); + nfp_net_tx_desc_limits(hw, hw_priv, &min_tx_desc, &max_tx_desc); /* Validating number of descriptors */ tx_desc_sz = nb_desc * sizeof(struct nfp_net_nfdk_tx_desc); diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 58e155e92b..38fe153ab4 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -1494,8 +1494,7 @@ nfp_enable_multi_pf(struct nfp_pf_dev *pf_dev) } static int -nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv, - const struct nfp_dev_info *dev_info) +nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) { uint8_t i; uint8_t id; @@ -1601,7 +1600,6 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv, /* Add this device to the PF's array of physical ports */ app_fw_nic->ports[id] = hw; - hw->dev_info = dev_info; hw->cpp = pf_dev->cpp; hw->eth_dev = eth_dev; hw->idx = id; @@ -1968,6 +1966,7 @@ nfp_pf_init(struct rte_pci_device *pci_dev) PMD_INIT_LOG(DEBUG, "qc_bar address: %p", pf_dev->qc_bar); hw_priv->pf_dev = pf_dev; + hw_priv->dev_info = dev_info; /* * PF initialization has been done at this point. Call app specific @@ -1982,7 +1981,7 @@ nfp_pf_init(struct rte_pci_device *pci_dev) } PMD_INIT_LOG(INFO, "Initializing coreNIC"); - ret = nfp_init_app_fw_nic(hw_priv, dev_info); + ret = nfp_init_app_fw_nic(hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize coreNIC!"); goto hwqueues_cleanup; @@ -1990,7 +1989,7 @@ nfp_pf_init(struct rte_pci_device *pci_dev) break; case NFP_APP_FW_FLOWER_NIC: PMD_INIT_LOG(INFO, "Initializing Flower"); - ret = nfp_init_app_fw_flower(hw_priv, dev_info); + ret = nfp_init_app_fw_flower(hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize Flower!"); goto hwqueues_cleanup; @@ -2187,6 +2186,7 @@ nfp_pf_secondary_init(struct rte_pci_device *pci_dev) pf_dev->sync = sync; hw_priv->pf_dev = pf_dev; + hw_priv->dev_info = dev_info; /* Call app specific init code now */ switch (app_fw_id) { diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index 88da593190..bd3745a5c5 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -162,14 +162,17 @@ nfp_netvf_close(struct rte_eth_dev *dev) { struct nfp_net_hw *net_hw; struct rte_pci_device *pci_dev; + struct nfp_net_hw_priv *hw_priv; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; net_hw = dev->data->dev_private; pci_dev = RTE_ETH_DEV_TO_PCI(dev); + hw_priv = dev->process_private; rte_free(net_hw->eth_xstats_base); + rte_free(hw_priv); /* * We assume that the DPDK application is stopping all the @@ -255,6 +258,7 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) uint64_t tx_bar_off = 0; uint64_t rx_bar_off = 0; struct rte_pci_device *pci_dev; + struct nfp_net_hw_priv *hw_priv; const struct nfp_dev_info *dev_info; port = eth_dev->data->port_id; @@ -267,7 +271,6 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) } net_hw = eth_dev->data->dev_private; - net_hw->dev_info = dev_info; hw = &net_hw->super; hw->ctrl_bar = pci_dev->mem_resource[0].addr; @@ -284,6 +287,17 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) nfp_netvf_ethdev_ops_mount(net_hw, eth_dev); + hw_priv = rte_zmalloc(NULL, sizeof(*hw_priv), 0); + if (hw_priv == NULL) { + PMD_INIT_LOG(ERR, "Can not alloc memory for hw priv data"); + err = -ENOMEM; + goto hw_priv_free; + } + + hw_priv->dev_info = dev_info; + + eth_dev->process_private = hw_priv; + /* For secondary processes, the primary has done all the work */ if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -366,6 +380,8 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) free_xstats: rte_free(net_hw->eth_xstats_base); +hw_priv_free: + rte_free(hw_priv); return err; } diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index 60d77b6178..8cc8b77318 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -1144,16 +1144,17 @@ nfp_net_xstats_reset(struct rte_eth_dev *dev) } void -nfp_net_rx_desc_limits(struct nfp_net_hw *hw, +nfp_net_rx_desc_limits(struct nfp_net_hw_priv *hw_priv, uint16_t *min_rx_desc, uint16_t *max_rx_desc) { - *max_rx_desc = hw->dev_info->max_qc_size; - *min_rx_desc = hw->dev_info->min_qc_size; + *max_rx_desc = hw_priv->dev_info->max_qc_size; + *min_rx_desc = hw_priv->dev_info->min_qc_size; } void nfp_net_tx_desc_limits(struct nfp_net_hw *hw, + struct nfp_net_hw_priv *hw_priv, uint16_t *min_tx_desc, uint16_t *max_tx_desc) { @@ -1164,8 +1165,8 @@ nfp_net_tx_desc_limits(struct nfp_net_hw *hw, else tx_dpp = NFDK_TX_DESC_PER_SIMPLE_PKT; - *max_tx_desc = hw->dev_info->max_qc_size / tx_dpp; - *min_tx_desc = hw->dev_info->min_qc_size / tx_dpp; + *max_tx_desc = hw_priv->dev_info->max_qc_size / tx_dpp; + *min_tx_desc = hw_priv->dev_info->min_qc_size / tx_dpp; } int @@ -1183,8 +1184,8 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) hw = nfp_net_get_hw(dev); hw_priv = dev->process_private; - nfp_net_rx_desc_limits(hw, &min_rx_desc, &max_rx_desc); - nfp_net_tx_desc_limits(hw, &min_tx_desc, &max_tx_desc); + nfp_net_rx_desc_limits(hw_priv, &min_rx_desc, &max_rx_desc); + nfp_net_tx_desc_limits(hw, hw_priv, &min_tx_desc, &max_tx_desc); dev_info->max_rx_queues = (uint16_t)hw->max_rx_queues; dev_info->max_tx_queues = (uint16_t)hw->max_tx_queues; diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 8dbe2fb973..31deeb43ce 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -158,6 +158,9 @@ struct nfp_app_fw_nic { struct nfp_net_hw_priv { struct nfp_pf_dev *pf_dev; + + /** NFP ASIC params */ + const struct nfp_dev_info *dev_info; }; struct nfp_net_hw { @@ -177,9 +180,6 @@ struct nfp_net_hw { uint32_t rx_offset; enum nfp_net_meta_format meta_format; - /** NFP ASIC params */ - const struct nfp_dev_info *dev_info; - uint8_t *tx_bar; uint8_t *rx_bar; @@ -297,10 +297,11 @@ void nfp_net_close_rx_queue(struct rte_eth_dev *dev); void nfp_net_stop_tx_queue(struct rte_eth_dev *dev); void nfp_net_close_tx_queue(struct rte_eth_dev *dev); int nfp_net_set_vxlan_port(struct nfp_net_hw *hw, size_t idx, uint16_t port); -void nfp_net_rx_desc_limits(struct nfp_net_hw *hw, +void nfp_net_rx_desc_limits(struct nfp_net_hw_priv *hw_priv, uint16_t *min_rx_desc, uint16_t *max_rx_desc); void nfp_net_tx_desc_limits(struct nfp_net_hw *hw, + struct nfp_net_hw_priv *hw_priv, uint16_t *min_tx_desc, uint16_t *max_tx_desc); int nfp_net_check_dma_mask(struct nfp_net_hw *hw, char *name); diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 12f362a4f4..8697c5d711 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -606,10 +606,12 @@ nfp_net_rx_queue_setup(struct rte_eth_dev *dev, struct nfp_net_hw *hw; struct nfp_net_rxq *rxq; const struct rte_memzone *tz; + struct nfp_net_hw_priv *hw_priv; hw = nfp_net_get_hw(dev); + hw_priv = dev->process_private; - nfp_net_rx_desc_limits(hw, &min_rx_desc, &max_rx_desc); + nfp_net_rx_desc_limits(hw_priv, &min_rx_desc, &max_rx_desc); /* Validating number of descriptors */ rx_desc_sz = nb_desc * sizeof(struct nfp_net_rx_desc); From patchwork Fri Apr 19 03:12:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 139521 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 737D743EA9; Fri, 19 Apr 2024 05:13:42 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7AFBD409FA; Fri, 19 Apr 2024 05:13:05 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2108.outbound.protection.outlook.com [40.107.237.108]) by mails.dpdk.org (Postfix) with ESMTP id EBB9E406B7 for ; Fri, 19 Apr 2024 05:13:03 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EkVsnfqhMBexg1Gl32RTOTWO28N+fkA5VltEPcYrT6KAe8ZZaa07NzuuW47E9O2Dull66lEFgirURXz6ttZva9aIdtlXSn3xpmSdyQ8jT1D5BtztbqzHboeqMKTrCzM+pPjAwOVN9IMLyukFepuE9IVg8ctuZLfSr3dth24f51yjN9SE4Zdvy5An2vOp47ZirRadZtOKfE2ZDsoPZWQlhu4c5rrKNsZ2RiBrSdc5pBeukGHMrmPRZMpkCmv5YwMKIihWndSe/XFbu3SqQiW57wLHqPjTcZSfczkABzLiVfc2/5AoqBli4USqjDkymMoOtxW8QwcUaH8Ylho57PLHSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=9NVoX1e63mjnSOAbUSblBCC/Qvc6mNbIxAgojDYAa2M=; b=nIagI9gZfK9bu+VBQWNHtein2m8AahaORrxNFBmR7XuYbexiEci9i/PTEaf5Vu04ToLkTvj78l8cTKIUmFHV6Iz0yiTy3sXAWlGJIq/KNB+dNV/XcjSLzMNUwG1XuXxQi/7R3FC8xZ3abrM7pX6NepXo7DczZxz4tYm+G5Em5D+QbdCmPkpu8WX54oJsvJ69LBrEkNzQ3Geh4j6BXjU8e2BcFcAR3GSf73S/sjKh+TiBRnaGZqcQ6qjhdrBloc9Zik4YAf/RxiVVmBRqBJQ07QN2KBYSUYp6IlW5pZEds3ZiOZdhK+aRBRJ57dGak32Rwodi3QPQV8DFQ+17650jvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9NVoX1e63mjnSOAbUSblBCC/Qvc6mNbIxAgojDYAa2M=; b=OSerQCdrWX/u1uXUqi7J7tZf68RsSncX2hYN/LriGIwtnjOt+VH8v1Kz1GeDD7n+bk+TedDHPdoZhkdu0GR9VqhrOp6ngW/o5NLjm+Ru1aS2Bk/AsrTIzJlH579b4+xzJ4DQfdK1MpmoaKuIp9FZGCKuSGAUvQnIfiRMuqt16u4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY1PR13MB6310.namprd13.prod.outlook.com (2603:10b6:a03:52e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.38; Fri, 19 Apr 2024 03:13:02 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024 03:13:02 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH 6/8] net/nfp: unify CPP acquire method Date: Fri, 19 Apr 2024 11:12:24 +0800 Message-Id: <20240419031226.1191069-7-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240419031226.1191069-1-chaoyong.he@corigine.com> References: <20240419031226.1191069-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0044.apcprd01.prod.exchangelabs.com (2603:1096:4:193::8) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY1PR13MB6310:EE_ X-MS-Office365-Filtering-Correlation-Id: d8fa3dae-d2d9-488a-9b57-08dc601e9f78 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Wb3bP69zmIn7vx4q8ZrBjTuR45iFgFUzwaESgdTQAHL3wvQ97uK0ohlb5/cCpHYLpc+xKC/G+7TWRs6eVH06Lq9MTOGtPfDUZTJ+p9BlbD2RKboJWrsc8PEpySL5cpp9SFuBs9gG/TEZMaXUzp1y0Tlaqf5JcrdPEJi1clcxxgSmfE30qcsxmmpOQCxZQUa2o4R97J6T1stg1oSvPaZ91yZm5vLSI7rWP6zI8DjmJRwnU8ocRyQXaZ7RNXcGZ0C3WjmMghc0kTl1deCVRtyNHuf9U7yiXFNeBkJ938Cja6AR23VfTxz1H8m75C6MiJIvXft9kysPAe4l7sshCnngbRC5OPmJD0APKOae9sKn/sWJylvL+Se4XROUbtlLi/1S0ahXLiP26F8e7mmMCXdZdBfjfKkWfTM1Faadvsa6cnQRcckh75HPSotEKbkWml0hGuNgI7eYdlZdZpYu3RyLFfVBMG0peiQmqaZ41WRV1Zp0VfaJehhHa/9yNOjh6hfI+SHPSwruaJSvAYcTcpdKNvyveLZORB9zvvdHJGUwTzIhXqzQ69h4CeZW+48lfrNuGWwf9p7aIZZpaYRrpI3IMT22swS7HXv7wi1Ypd2NzKB81m0o2C/HNIfs5RiGIjwiKqCvXEpw49gxr0sDt0RoROMyUp4um3c/OcvSTOld8I5m4+JcXfa6fI0KI+9BWC2K+d6ifO16KgxzSGeMjBWPj/XciHTDYsa9su/nrVdEyj7d0HCUQDqugeIeDTC6dokqDp3H9jl669Na1svQzN0wzmfRve4iJDxK5BJW2VW/EnmuxPx+7SQl+stHhTzs4996glqu3scpTyhZ0zsnofhldP0Tu0qLmOIfW/bpsZg80uTmSA6io8Y2bRbHCTM2D5FC3CXvOyZOm+rIVan8I5G6pIa04Zihzgy0QIZDD4ban1qzzftciCCs7zOl14xk61GPIV/rbXOld2NeGASrJ/P/72k93VGipKXpTZfu3Hu/vC8EvwOZ2XMCPSaxDx+8ia37bpN2aY8NqWj0+pg+WCUEJl0rRasHrY5fkr0pe+nXKaZcdGw9wpguqM1NptVhy8m07e2C/uaWZIYBc8RaiIWyWHGnpynskkQK5Nz+BFYSYeRtOjKl6kfHVHSwe173w1EHwtfUw+pqLq3NXi+PYqV1Vu6r+YJlL8vbDhTfAdDoDqM2HPB/Vfa8ROCuiSmQjeMZFFT5YWj4YpLvB+blWmTsgNQRxK6CMCPc5NYsRtc2Ezt0EzzCug/Ap6zNJMAkzoSS5nvx5h0n/hLO7Q1i/MKYNduSvLSEcSCBzj92HWJUK286ETIDfx2bq5nS2HsM0Ew2l6FtllfgQefn573ufi+BVg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(52116005)(376005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: LeIXzIzGxRZjHxCRDTl4Uwao+pcJmdKl+IyOYfZAjFtPiWCr6Ux0nyrkHyMSea+LXiEptDajjvH/mbQ3h232IEcwhnvfqEGB+0VaxATOBubgdI6ut9GaFP7dAQVpSJ/G8TyPzR+AujC2pU1NewgeZXwa54bwCdv3O138AVOSoQLgyqwdY2oQL2dR6HFQzR3qqSXrPqVX+wu0LZLSxKKocnGYGcDspllAd29yLM3BbBHsJXPnVGwJ/qkAXWKSxpDa1hYXc52MZCS8pqZTVsxLQ+1Xyxmov7MEqd+PBggMiSmELpr1xGH00FGo78tf3SBqJwKei/vPNV96gkDGsUthpikumqGdrpC/yjUb63WpDdUnAvI/P7pfXveBuSPRWhoJDTwAgOuPITf1F4ulk9j8eBEONEFGENs63ZNau61jcXY8R7XXGl5jTMznYo/WWnLSYzRUeh4NQH3yZK6gSmFGMBGkR1wzKZDROKCMyXz6N3vtFWIDY+fW802XkmGG6FPh+flCLMX9Qow091RZKEp5mu3So8cmzlDs7FEYthbwULGwHORhuSfY7nk9eO2hHgA5XXucdkp/n75JyB2vASCMgGodt16Sjf7gsczlB+JqkazNkOEGsyz9c08of96p3efOCIBNItfwuHyWbGzEtJrry1ShiRbSytL0WVP6JOOQgGMeXVVK3sDaQKjLQOfZ1hDTsEoQCKeDDn7V++LJaC5HySU9dLG6Wzmm4i53BJ4kkbBhScMvgKq3BBuGEyyGqswSBnDkN5jbhIwc60RIbIlitgMS33pHcVdpVT0Y5jTpuCw19SGy/VBf+gOdY3ozrozWhJkf282dv1cgUd+7ikRl+boy1EQO2IRkFEq+SoaHFbgcprmL9kEx0CAyEvfRlEsjELwBTu+VK9N1effV6Tw4xsFuTkQfEBNVayp9+PY3t1OSlthj48CfsAjEaLYOFL8SO5XbM3N9rBmtdN7LwavR38EhXWlvm3tmuxM5/jKvTJvJe5r7UQuUvNLA2RF+yGYTASMUp6G7kDFekszBML/SbYkmZCDZsP/FNEmbhCdqHpOCLPR0M2lVTriYNy5WYWsysZelmoR1qdKMBIjVzYCQ6bXehkwMX98TQ27m7hoTlEUUH47GObyrfMk9BSynHiWLTW4CHJBPIYledW7qTpTT3kjT77D/O/aV09DodfHdH90m6CTP0CYCDSLXe2oTN5l+8axkk+gD3wEJ2PNq4CvB98WcA/AK1vCPvev+t270doiq/2m/GJkyV8B+PzdjEVtsAbiUREzr9dr3riSzJUH7G8fp19w59IGpyeW+wqAjNV1Ky31GFhGy2Npb8Ujxuspz8fRu6Cd5d9w0PGl8PyhbiEfyNZNfex02boUlJhaW3j7KQWfV0ub3XFCsXIIlKJptG4eKl9dajpwFfwS6SEDMV9zCpQPl6uw+MBZls92pntTKp1NPmTkkL0HlR6M+PYfPhM3LJsUhDZN9EGn1ccqdXN8Hxk05b8iu4qp6sDR0b9FEMPVux7XGpAVQwMmPClFOlG7zl5esog53RVGzrU0pt64C5GCEMhh7vlOen+KpK1TRsZ9XkqJW6pRyMrk6YepJUsuEwoC7MjNC+7b9CvAWJw== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: d8fa3dae-d2d9-488a-9b57-08dc601e9f78 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 03:13:02.3249 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Zh6otjr9vLhSvsqS+EzWnDoSjVuLQnn/fYTIMqW04RA/X0eBEAqxmcgF4BoYh5N8vOyjp8zcKuvoSdrllWmPiXTIsmJG7wE40h8sWw9rFBI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR13MB6310 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 Getting CPP from 'struct nfp_net_hw' is not right in multiple process user case. Modify the data structure and related logic to get it from process private data structure. Signed-off-by: Chaoyong He Signed-off-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/flower/nfp_flower.c | 4 --- .../net/nfp/flower/nfp_flower_representor.c | 2 +- drivers/net/nfp/nfp_ethdev.c | 31 +++------------- drivers/net/nfp/nfp_net_common.c | 36 ++++++++----------- drivers/net/nfp/nfp_net_common.h | 3 +- 5 files changed, 22 insertions(+), 54 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 41678c93b5..e472daa5a5 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -707,7 +707,6 @@ nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv) /* Fill in the PF vNIC and populate app struct */ app_fw_flower->pf_hw = pf_hw; pf_hw->super.ctrl_bar = pf_dev->ctrl_bar; - pf_hw->cpp = pf_dev->cpp; ret = nfp_flower_init_vnic_common(hw_priv, pf_hw, "pf_vnic"); if (ret != 0) { @@ -730,9 +729,6 @@ nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv) goto pf_cpp_area_cleanup; } - /* Now populate the ctrl vNIC */ - ctrl_hw->cpp = pf_dev->cpp; - ret = nfp_flower_init_ctrl_vnic(app_fw_flower, hw_priv); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not initialize flower ctrl vNIC"); diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 934f078dca..0e19723f57 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -826,7 +826,7 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower, */ for (i = 0; i < app_fw_flower->num_vf_reprs; i++) { flower_repr.repr_type = NFP_REPR_TYPE_VF; - flower_repr.port_id = nfp_get_pcie_port_id(app_fw_flower->pf_hw->cpp, + flower_repr.port_id = nfp_get_pcie_port_id(hw_priv->pf_dev->cpp, NFP_FLOWER_CMSG_PORT_VNIC_TYPE_VF, i, 0); flower_repr.nfp_idx = 0; flower_repr.vf_id = i; diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 38fe153ab4..258b617eb2 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -224,7 +224,7 @@ nfp_net_speed_configure(struct rte_eth_dev *dev) } } - nsp = nfp_eth_config_start(net_hw->cpp, eth_port->index); + nsp = nfp_eth_config_start(hw_priv->pf_dev->cpp, eth_port->index); if (nsp == NULL) { PMD_DRV_LOG(ERR, "Couldn't get NSP."); return -EIO; @@ -267,7 +267,6 @@ nfp_net_start(struct rte_eth_dev *dev) uint16_t i; struct nfp_hw *hw; uint32_t new_ctrl; - struct nfp_cpp *cpp; uint32_t update = 0; uint32_t cap_extend; uint32_t intr_vector; @@ -402,13 +401,8 @@ nfp_net_start(struct rte_eth_dev *dev) goto error; } - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - cpp = net_hw->cpp; - else - cpp = pf_dev->cpp; - /* Configure the physical port up */ - nfp_eth_set_configured(cpp, net_hw->nfp_idx, 1); + nfp_eth_set_configured(pf_dev->cpp, net_hw->nfp_idx, 1); for (i = 0; i < dev->data->nb_rx_queues; i++) dev->data->rx_queue_state[i] = RTE_ETH_QUEUE_STATE_STARTED; @@ -440,38 +434,26 @@ nfp_net_start(struct rte_eth_dev *dev) static int nfp_net_set_link_up(struct rte_eth_dev *dev) { - struct nfp_cpp *cpp; struct nfp_net_hw *hw; struct nfp_net_hw_priv *hw_priv; hw = dev->data->dev_private; hw_priv = dev->process_private; - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - cpp = hw->cpp; - else - cpp = hw_priv->pf_dev->cpp; - - return nfp_eth_set_configured(cpp, hw->nfp_idx, 1); + return nfp_eth_set_configured(hw_priv->pf_dev->cpp, hw->nfp_idx, 1); } /* Set the link down. */ static int nfp_net_set_link_down(struct rte_eth_dev *dev) { - struct nfp_cpp *cpp; struct nfp_net_hw *hw; struct nfp_net_hw_priv *hw_priv; hw = dev->data->dev_private; hw_priv = dev->process_private; - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - cpp = hw->cpp; - else - cpp = hw_priv->pf_dev->cpp; - - return nfp_eth_set_configured(cpp, hw->nfp_idx, 0); + return nfp_eth_set_configured(hw_priv->pf_dev->cpp, hw->nfp_idx, 0); } static uint8_t @@ -1178,7 +1160,6 @@ nfp_fw_check_change(struct nfp_cpp *cpp, bool *fw_changed) { int ret; - struct nfp_net_hw hw; uint32_t new_version = 0; uint32_t old_version = 0; @@ -1186,8 +1167,7 @@ nfp_fw_check_change(struct nfp_cpp *cpp, if (ret != 0) return ret; - hw.cpp = cpp; - nfp_net_get_fw_version(&hw, &old_version); + nfp_net_get_fw_version(cpp, &old_version); if (new_version != old_version) { PMD_DRV_LOG(INFO, "FW version is changed, new %u, old %u", @@ -1600,7 +1580,6 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) /* Add this device to the PF's array of physical ports */ app_fw_nic->ports[id] = hw; - hw->cpp = pf_dev->cpp; hw->eth_dev = eth_dev; hw->idx = id; hw->nfp_idx = nfp_eth_table->ports[id].index; diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index 8cc8b77318..7541afa235 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -695,7 +695,7 @@ nfp_net_speed_aneg_update(struct rte_eth_dev *dev, /* Compare whether the current status has changed. */ if (dev->data->dev_link.link_status != link->link_status) { - nfp_eth_table = nfp_eth_read_ports(hw->cpp); + nfp_eth_table = nfp_eth_read_ports(hw_priv->pf_dev->cpp); if (nfp_eth_table == NULL) { PMD_DRV_LOG(DEBUG, "Error reading NFP ethernet table."); return -EIO; @@ -2094,12 +2094,12 @@ nfp_net_cfg_read_version(struct nfp_net_hw *hw) } static void -nfp_net_get_nsp_info(struct nfp_net_hw *hw, +nfp_net_get_nsp_info(struct nfp_net_hw_priv *hw_priv, char *nsp_version) { struct nfp_nsp *nsp; - nsp = nfp_nsp_open(hw->cpp); + nsp = nfp_nsp_open(hw_priv->pf_dev->cpp); if (nsp == NULL) return; @@ -2111,12 +2111,12 @@ nfp_net_get_nsp_info(struct nfp_net_hw *hw, } void -nfp_net_get_fw_version(struct nfp_net_hw *hw, +nfp_net_get_fw_version(struct nfp_cpp *cpp, uint32_t *mip_version) { struct nfp_mip *mip; - mip = nfp_mip_open(hw->cpp); + mip = nfp_mip_open(cpp); if (mip == NULL) { *mip_version = 0; return; @@ -2128,12 +2128,12 @@ nfp_net_get_fw_version(struct nfp_net_hw *hw, } static void -nfp_net_get_mip_name(struct nfp_net_hw *hw, +nfp_net_get_mip_name(struct nfp_net_hw_priv *hw_priv, char *mip_name) { struct nfp_mip *mip; - mip = nfp_mip_open(hw->cpp); + mip = nfp_mip_open(hw_priv->pf_dev->cpp); if (mip == NULL) return; @@ -2185,8 +2185,8 @@ nfp_net_firmware_version_get(struct rte_eth_dev *dev, snprintf(vnic_version, FW_VER_LEN, "*"); } - nfp_net_get_nsp_info(hw, nsp_version); - nfp_net_get_mip_name(hw, mip_name); + nfp_net_get_nsp_info(hw_priv, nsp_version); + nfp_net_get_mip_name(hw_priv, mip_name); nfp_net_get_app_name(hw_priv, app_name); snprintf(fw_version, FW_VER_LEN, "%s %s %s %s", @@ -2220,7 +2220,6 @@ nfp_net_is_valid_nfd_version(struct nfp_net_fw_ver version) int nfp_net_stop(struct rte_eth_dev *dev) { - struct nfp_cpp *cpp; struct nfp_net_hw *hw; struct nfp_net_hw_priv *hw_priv; @@ -2233,12 +2232,7 @@ nfp_net_stop(struct rte_eth_dev *dev) nfp_net_stop_tx_queue(dev); nfp_net_stop_rx_queue(dev); - if (rte_eal_process_type() == RTE_PROC_PRIMARY) - cpp = hw->cpp; - else - cpp = hw_priv->pf_dev->cpp; - - nfp_eth_set_configured(cpp, hw->nfp_idx, 0); + nfp_eth_set_configured(hw_priv->pf_dev->cpp, hw->nfp_idx, 0); return 0; } @@ -2285,7 +2279,7 @@ nfp_net_flow_ctrl_get(struct rte_eth_dev *dev, } static int -nfp_net_pause_frame_set(struct nfp_net_hw *net_hw, +nfp_net_pause_frame_set(struct nfp_net_hw_priv *hw_priv, struct nfp_eth_table_port *eth_port, enum rte_eth_fc_mode mode) { @@ -2293,7 +2287,7 @@ nfp_net_pause_frame_set(struct nfp_net_hw *net_hw, bool flag; struct nfp_nsp *nsp; - nsp = nfp_eth_config_start(net_hw->cpp, eth_port->index); + nsp = nfp_eth_config_start(hw_priv->pf_dev->cpp, eth_port->index); if (nsp == NULL) { PMD_DRV_LOG(ERR, "NFP error when obtaining NSP handle."); return -EIO; @@ -2350,7 +2344,7 @@ nfp_net_flow_ctrl_set(struct rte_eth_dev *dev, if (set_mode == original_mode) return 0; - ret = nfp_net_pause_frame_set(net_hw, eth_port, set_mode); + ret = nfp_net_pause_frame_set(hw_priv, eth_port, set_mode); if (ret != 0) return ret; @@ -2438,7 +2432,7 @@ nfp_net_fec_get(struct rte_eth_dev *dev, return -EINVAL; if (dev->data->dev_link.link_status == RTE_ETH_LINK_DOWN) { - nfp_eth_table = nfp_eth_read_ports(hw->cpp); + nfp_eth_table = nfp_eth_read_ports(hw_priv->pf_dev->cpp); hw_priv->pf_dev->nfp_eth_table->ports[hw->idx] = nfp_eth_table->ports[hw->idx]; free(nfp_eth_table); } @@ -2520,5 +2514,5 @@ nfp_net_fec_set(struct rte_eth_dev *dev, return -EIO; } - return nfp_eth_set_fec(hw->cpp, eth_port->index, fec); + return nfp_eth_set_fec(hw_priv->pf_dev->cpp, eth_port->index, fec); } diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 31deeb43ce..40f314af0a 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -201,7 +201,6 @@ struct nfp_net_hw { struct rte_eth_stats eth_stats_base; struct rte_eth_xstat *eth_xstats_base; - struct nfp_cpp *cpp; struct nfp_cpp_area *ctrl_area; struct nfp_cpp_area *mac_stats_area; uint8_t *mac_stats_bar; @@ -322,7 +321,7 @@ int nfp_net_fec_get(struct rte_eth_dev *dev, uint32_t *fec_capa); int nfp_net_fec_set(struct rte_eth_dev *dev, uint32_t fec_capa); -void nfp_net_get_fw_version(struct nfp_net_hw *hw, +void nfp_net_get_fw_version(struct nfp_cpp *cpp, uint32_t *fw_version); int nfp_net_txrwb_alloc(struct rte_eth_dev *eth_dev); void nfp_net_txrwb_free(struct rte_eth_dev *eth_dev); From patchwork Fri Apr 19 03:12:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 139522 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 9F0BF43EA9; Fri, 19 Apr 2024 05:13:52 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A786540A76; Fri, 19 Apr 2024 05:13:08 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2130.outbound.protection.outlook.com [40.107.237.130]) by mails.dpdk.org (Postfix) with ESMTP id EBAEF40A6C for ; Fri, 19 Apr 2024 05:13:05 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gRtqkrDtIke8BVI3jJft+3TxJa9EwQYwKPqKz7aZJ0GCUZ7FbyIOX1OF1hOOcaVZMQDOgC29cF/MxiPNSfF8984sJXZuCpWKrphcECEmCPftD3QU86iBU05VkyXFsnxQ1/DPk40bl5twweTLAzSzNA2tTiLYaU9hnbuWvY5w0Ouieoz4+12/hU7z5TIB9i6keJEYTDdyrQv97iMBANKZxnOWXhpFBIuvrXuiJWpTEQh7LvtprZxCXLqnyYvsVzLig9rf4hw78oyG84UnuNT5E8VoaZd38+yNZNcewQbJOyCWJQWs8KsM4SJlhhavlVLksSrv6mXYbK1Ts62OkQEnPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=d0f3VT6zdacQiSbeViQD6cSQx2IMjmjGeYOmd0g4ync=; b=W8MBrST/mFj8zk8HgrcRZQ7Qoz+0x9nYA1xsrrc/sFH4beDSVmdBpZUxRGqiax7LLo+FggELZlMLCZHNdIbopsQTGRP+Zt1cYpqJgpnZh2TPhcsKZidMRdj1XsHag008I+kQDRWZ/iOpb+0siZDOo7w9kNDSS7WaU8SF2ASo22O98KJtDEWR4HzuB26nHXUlBtEJQ0/54pQOKxODu1uWI4wt7Wy/PQVx+eJBANIwYFcuk8/UI6dL0M20zAK7u8YgPDgLiPYlEcap80eC924YmBMCAMoxPJ1jJjCGU35BXHWvMObWp1I1eOlB2OIGb0i6l6Ybve8KZhroqy0/PGoKEA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=d0f3VT6zdacQiSbeViQD6cSQx2IMjmjGeYOmd0g4ync=; b=JZKxeaEDpabuPUfopyoPorcKXa17vdBjciQiTjW5yM6HDNsh11GWP3gBBKJ33xrNsyVnwO6TK82eUfcYVoGy5ijXGEfBh+yqdSnHr9NPqtprW4CQqle0YnE9TYUbQpui5TUfUv9Lg5HNwcM1vdTgjLRpscpbPcldwe4O7CvvuTo= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY1PR13MB6310.namprd13.prod.outlook.com (2603:10b6:a03:52e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.38; Fri, 19 Apr 2024 03:13:04 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024 03:13:04 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH 7/8] net/nfp: remove ethernet device data field Date: Fri, 19 Apr 2024 11:12:25 +0800 Message-Id: <20240419031226.1191069-8-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240419031226.1191069-1-chaoyong.he@corigine.com> References: <20240419031226.1191069-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0044.apcprd01.prod.exchangelabs.com (2603:1096:4:193::8) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY1PR13MB6310:EE_ X-MS-Office365-Filtering-Correlation-Id: ccd79d23-219a-46b1-491c-08dc601ea0d0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nbcfG7nzN3u6DKsIDCOh7x7m9YIt/ODinR82zj6SPbNDmpSHDkKhd4sdgOR6XQFdkNc4zslz9jypb4eWQjyxLP78uzCf0G+bpe6pSqmyd0Ni02TkgjuGVl5tc+HhsrRhA7X7X2Y5yonIF5lEvMXrAv0voE3N5sEH2rzUyCgNs2zly1bdeBXCpO1BIRuQnn7GmyJ4WCsrJoFiTJRJz114ykKR4AXaU1bVLrR45dJBPp1g6Q63yxm2Y4wtzJzPg1Q7splDCfsCtu3KNH+R9l0my14vitGM+i6auQbxwbPOTvsmAd7LLB1LHEumLbyjAkFaoIp8/aBuY1FPtgNJKDE5RBjeIQ0eGKj6l0GPjz/ESegHUHNBYJmSeom2pLCVOm9ZbaViJ5Se+8BbI37iEIHR5ClQ0vxEYn4f2G/Yc+/dmj6xEEhkn24r41Mk3LQrXOIcrCqJcD0bTr7hQoK2/x0C+HRNVac5oYGpI1PafJvmzYik5hC3oV1B+onnCiQm2f/WT0PBx/2uJIu+rDzjQ1Tn4ad16jy1rAXKVKnm7CPWR7yXt7NotY3c2nUHHe1VXcrGazLB9Oxn7vg8UjUKsujpd0PuQh59HkCdxgg+H2CItq09yKe7sZt0q7mmxY3/vmS/k08w/oa4tt9ad+Df1uCmnKGJGntatFgkasQeEQERhCc/hypKToRAZnRFORXaZJ9jniMtGHG/3usKUoo6ZdEuVfmpYnGGiXGs8kBpT6NY8e4nXfnDAlna7Fa/HyysHzNQag6Y/4N1jvsoMWqw3DnATvliPDAxFBvHPCZLm2r4jrfIHQYCCYhFRwo38TeHcAwQyUR2rFNa3y6OBW3dIL1wdoFGNdKUD/a1N+RhgLjMWOPqGttPSGgUzTtvLA4ro6H2R8IQdFwpT2EGOHmXlSJyKOtnWDn+mtRUNHkrxgQfaVdngwu+PlfjQEErVSeTopZsHHuc8xDtmlwspQclvXOR1BuxSVosXWh5Cc2TupsMJghWiDJzSnCBaHJAQd/co6fuIpQ5XCgD6Rj9L5DpYDM2fJkY3fs5RKDbaysHui1RFzYJQAmu7HLHk6DXlNwBRSdm9lVK5tSSMuA2UxMa3z7KBy5Z2I44xwnTKfQqqB57uRCLMtVlJlo5l+eVm3J6reVJ9slfcZUVpszuWM91oJpqqWzjpWXMaPaJdxO/D90Bqk3gHwWkyfd4sz9knUzPCO7CADXPcHFybwTiRW72B2pqRkaYj/fsVKFdLN3yk8tLIRyiT0hL4WPrgnjdvqywT2uTK34qGNxfirL+EFjtR6g4hLSjP4uIfGu0spT4oviTDOlK7DhGNMyGkkEG9ZB39PxEiHLg7MkdHIXRHpj0bxOoGQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(52116005)(376005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: MSoXVArIDLveTHlNFkehORVeCy8cZefT4xhN7bjsPx9e9TB7cNY6G4W6QRFOW0+IHKv3fTJySFbrupokwEmIqLftnLoSEhlVaxkV99tLeTu2DDy1GH9ebwJgQM19iL69/ZqgUIi13oHwYC+MLRqlUJ6bw3zrKIc4YeAcUJZp7H/WKLP75SYrNvyBPNryTvb2xpWZz4ZdUVhx74qG4b0ouiYDcHWe1I3GTxN2At2FKw556B9eZRj0eJO3s4yESzndHvZl1oW4g4b6xdEtu+YNc0r+eoBQ/E1GYa1wK7u9KTAC3cVjwfjYWOtQmB7vzZfrezF984UEhdH3Cp1BGr/xetKbASKMWmlD5vwo9Au6RsREqwqIqTAZ5otRBIaTQ1xvoEIrOaMmx9xYfen9bAVlQqMRVEcpN+8K1xQu1KNw9uscMB2VsR74wNjrNNKd1DB7XpUVJtvtWSYmqaSk5Tm7dVQWNrMvQW5nD1kqVrUkDglOGoSCW9V14HKHyAl0n9AfifC6XaxFdDXosN8pQ28mvWTzre/3vTTZxCSAJwkzT5l9cyO31qDqJKST8Yz9CMs2UcEcJPY9A36JfjDBwlW30TMgto+NEOzZs4EVppypTwoWb8/kBUFO/G3D4Qgrn90GxfRylW/Hm2glzwlW4RJimoNhekHzeUtUZcSbgcJWVUnQ75EbDLcIWrpQxSnwhh5DoC3X1C18nPn/Msqz5Q3VrV2EKLMi0khmsqQTWsK4UVEvFhwy4rENUG6Cv0vPyYhVyAvFvLdVjvTuu6OHNYLK2WPMM54TBM5bJYDI2OEHCZ0pUoFWtxtKLthQcsG7vf/oLJY6nNN5Llkw2DmpCpm6PBtIvqyH7to0E6vJk3tweOpmojQPX8xNo3GOzHnGey5k9UgSDZQt2cdaHFblhhfV95JC49OHthdJtx+4zH7emr81j3wL6uc05oNFWuGhckii638ENDHK6/h4MHx/IX7BDFDj9b/LAirpw267TRJiNpv+rzPWoXgRP2gdDOGmWLCp9KJb+eAik9r/6PbEKD81WSYKJfUF47+q37mXHLocqdn6bD4Sm1bU2QbQX4uio8KwSePVm9MajgDA0JJUnBGgtbQ10Fxke2wF7+A+4lqL2rOzj06wv1g+VrmXO5kWPPY5EkKjF9Orsld1mvQ+Syd7RrhiHAp1mR9/ykFHRgpXtOs0h/9+mfSdxW9e79nDXwhyogD2cIwQYlkX3bt6r34BxL8uxjXX8XB5a4cvbyGKImz+3tBCsBvloo5uVSXQ1Rd6WN/y1cD6wyHpSskYqf+K8Ji6PZpvz7c02EK3IbQwOS9fBrKBnurPpW10EnU/krahBr9n4abBVgyvNGusA8fcqjS3RGyUVe+ZhXEzadOMKk5f5RrxcHDqJBg6fOW82d0PpBcLiLFkOa4w0zrwkBSeo4O6KPobl4LuN2DMQetkTRidNJCUk7ooYKqUshVD0SqLrSOy3xtb6kofRgYyZDGFUVtfaX+ogDEbIEsL30BZbM6D9m5Vecp7FvX+WXh13RkS/TMWVVvGzbHPsuvKEJHoNM9aay1W3Yww6STgHMlmnIZRc9wmwq0dZXn+u0nL09A3NUgIsoIu9yvmq2Hr0UtBIw== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: ccd79d23-219a-46b1-491c-08dc601ea0d0 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 03:13:04.5214 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: C+O3k4kvTpLd2POVRj+gJfSP36IC/bmaQblIhl9f1yFau1L8ixiq191o4Ti+B26KoSXlitHsCoFCe86Vt5e6cKutRe6Wm++wWomH0f75sVU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR13MB6310 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 Remove the 'eth_dev' field in process shared data 'struct nfp_net_hw', and modify the related logic. Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/flower/nfp_flower.c | 16 ++-- drivers/net/nfp/flower/nfp_flower.h | 2 + drivers/net/nfp/flower/nfp_flower_ctrl.c | 8 +- drivers/net/nfp/flower/nfp_flower_flow.c | 16 ++-- .../net/nfp/flower/nfp_flower_representor.c | 76 +++++++++---------- .../net/nfp/flower/nfp_flower_representor.h | 1 - drivers/net/nfp/nfp_ethdev.c | 36 ++++----- drivers/net/nfp/nfp_net_common.h | 3 - 8 files changed, 78 insertions(+), 80 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index e472daa5a5..fba8410c58 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -271,15 +271,15 @@ nfp_flower_init_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower, } /* Allocate memory for the eth_dev of the vNIC */ - hw->eth_dev = rte_zmalloc("nfp_ctrl_vnic", + app_fw_flower->ctrl_ethdev = rte_zmalloc("nfp_ctrl_vnic", sizeof(struct rte_eth_dev), RTE_CACHE_LINE_SIZE); - if (hw->eth_dev == NULL) { + if (app_fw_flower->ctrl_ethdev == NULL) { PMD_INIT_LOG(ERR, "Could not allocate ctrl vnic"); return -ENOMEM; } /* Grab the pointer to the newly created rte_eth_dev here */ - eth_dev = hw->eth_dev; + eth_dev = app_fw_flower->ctrl_ethdev; /* Also allocate memory for the data part of the eth_dev */ eth_dev->data = rte_zmalloc("nfp_ctrl_vnic_data", @@ -529,7 +529,7 @@ nfp_flower_cleanup_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower, char ctrl_rxring_name[RTE_MEMZONE_NAMESIZE]; hw = app_fw_flower->ctrl_hw; - eth_dev = hw->eth_dev; + eth_dev = app_fw_flower->ctrl_ethdev; pci_name = strchr(hw_priv->pf_dev->pci_dev->name, ':') + 1; @@ -562,15 +562,17 @@ nfp_flower_cleanup_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower, } static int -nfp_flower_start_ctrl_vnic(struct nfp_net_hw *net_hw) +nfp_flower_start_ctrl_vnic(struct nfp_app_fw_flower *app_fw_flower) { int ret; uint32_t update; uint32_t new_ctrl; struct nfp_hw *hw; struct rte_eth_dev *dev; + struct nfp_net_hw *net_hw; - dev = net_hw->eth_dev; + net_hw = app_fw_flower->ctrl_hw; + dev = app_fw_flower->ctrl_ethdev; hw = &net_hw->super; /* Disabling queues just in case... */ @@ -736,7 +738,7 @@ nfp_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv) } /* Start the ctrl vNIC */ - ret = nfp_flower_start_ctrl_vnic(app_fw_flower->ctrl_hw); + ret = nfp_flower_start_ctrl_vnic(app_fw_flower); if (ret != 0) { PMD_INIT_LOG(ERR, "Could not start flower ctrl vNIC"); goto ctrl_vnic_cleanup; diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index 5c2f338a20..ae80782df4 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -63,12 +63,14 @@ struct nfp_app_fw_flower { /** Pointer to the PF vNIC */ struct nfp_net_hw *pf_hw; + struct rte_eth_dev *pf_ethdev; /** Pointer to a mempool for the Ctrl vNIC */ struct rte_mempool *ctrl_pktmbuf_pool; /** Pointer to the ctrl vNIC */ struct nfp_net_hw *ctrl_hw; + struct rte_eth_dev *ctrl_ethdev; /** Ctrl vNIC Rx counter */ uint64_t ctrl_vnic_rx_count; diff --git a/drivers/net/nfp/flower/nfp_flower_ctrl.c b/drivers/net/nfp/flower/nfp_flower_ctrl.c index 4c2aeb9849..de6e419cac 100644 --- a/drivers/net/nfp/flower/nfp_flower_ctrl.c +++ b/drivers/net/nfp/flower/nfp_flower_ctrl.c @@ -153,12 +153,10 @@ nfp_flower_ctrl_vnic_nfd3_xmit(struct nfp_app_fw_flower *app_fw_flower, uint32_t free_descs; struct rte_mbuf **lmbuf; struct nfp_net_txq *txq; - struct nfp_net_hw *ctrl_hw; struct rte_eth_dev *ctrl_dev; struct nfp_net_nfd3_tx_desc *txds; - ctrl_hw = app_fw_flower->ctrl_hw; - ctrl_dev = ctrl_hw->eth_dev; + ctrl_dev = app_fw_flower->ctrl_ethdev; /* Flower ctrl vNIC only has a single tx queue */ txq = ctrl_dev->data->tx_queues[0]; @@ -232,7 +230,7 @@ nfp_flower_ctrl_vnic_nfdk_xmit(struct nfp_app_fw_flower *app_fw_flower, struct rte_eth_dev *ctrl_dev; struct nfp_net_nfdk_tx_desc *ktxds; - ctrl_dev = app_fw_flower->ctrl_hw->eth_dev; + ctrl_dev = app_fw_flower->ctrl_ethdev; /* Flower ctrl vNIC only has a single tx queue */ txq = ctrl_dev->data->tx_queues[0]; @@ -511,7 +509,7 @@ nfp_flower_ctrl_vnic_process(struct nfp_app_fw_flower *app_fw_flower) struct rte_eth_dev *ctrl_eth_dev; struct rte_mbuf *pkts_burst[MAX_PKT_BURST]; - ctrl_eth_dev = app_fw_flower->ctrl_hw->eth_dev; + ctrl_eth_dev = app_fw_flower->ctrl_ethdev; /* Ctrl vNIC only has a single Rx queue */ rxq = ctrl_eth_dev->data->rx_queues[0]; diff --git a/drivers/net/nfp/flower/nfp_flower_flow.c b/drivers/net/nfp/flower/nfp_flower_flow.c index 086cc8079a..8ff13923e5 100644 --- a/drivers/net/nfp/flower/nfp_flower_flow.c +++ b/drivers/net/nfp/flower/nfp_flower_flow.c @@ -3518,7 +3518,7 @@ nfp_flow_action_rss_add(struct nfp_flower_representor *representor, struct nfp_fl_rss **rss_store) { int ret; - struct nfp_net_hw *pf_hw; + struct rte_eth_dev *eth_dev; struct rte_eth_rss_conf rss_conf; struct nfp_fl_rss *rss_store_tmp; const struct rte_flow_action_rss *rss; @@ -3536,8 +3536,8 @@ nfp_flow_action_rss_add(struct nfp_flower_representor *representor, rss_conf.rss_hf = 0; rss_conf.rss_key = rss_key; - pf_hw = representor->app_fw_flower->pf_hw; - ret = nfp_net_rss_hash_conf_get(pf_hw->eth_dev, &rss_conf); + eth_dev = representor->app_fw_flower->pf_ethdev; + ret = nfp_net_rss_hash_conf_get(eth_dev, &rss_conf); if (ret != 0) { PMD_DRV_LOG(ERR, "Get RSS conf failed."); return ret; @@ -3563,7 +3563,7 @@ nfp_flow_action_rss_add(struct nfp_flower_representor *representor, rss_store_tmp->key_len = rss->key_len; } - ret = nfp_net_rss_hash_update(pf_hw->eth_dev, &rss_conf); + ret = nfp_net_rss_hash_update(eth_dev, &rss_conf); if (ret != 0) { PMD_DRV_LOG(ERR, "Update RSS conf failed."); free(rss_store_tmp); @@ -3580,7 +3580,7 @@ nfp_flow_action_rss_del(struct nfp_flower_representor *representor, struct rte_flow *nfp_flow) { int ret; - struct nfp_net_hw *pf_hw; + struct rte_eth_dev *eth_dev; struct nfp_fl_rss *rss_store; struct rte_eth_rss_conf rss_conf; uint8_t rss_key[NFP_NET_CFG_RSS_KEY_SZ]; @@ -3590,8 +3590,8 @@ nfp_flow_action_rss_del(struct nfp_flower_representor *representor, rss_conf.rss_hf = 0; rss_conf.rss_key = rss_key; - pf_hw = representor->app_fw_flower->pf_hw; - ret = nfp_net_rss_hash_conf_get(pf_hw->eth_dev, &rss_conf); + eth_dev = representor->app_fw_flower->pf_ethdev; + ret = nfp_net_rss_hash_conf_get(eth_dev, &rss_conf); if (ret != 0) { PMD_DRV_LOG(ERR, "Get RSS conf failed."); goto exit; @@ -3612,7 +3612,7 @@ nfp_flow_action_rss_del(struct nfp_flower_representor *representor, rss_conf.rss_key_len = 0; } - ret = nfp_net_rss_hash_update(pf_hw->eth_dev, &rss_conf); + ret = nfp_net_rss_hash_update(eth_dev, &rss_conf); if (ret != 0) PMD_DRV_LOG(ERR, "Update RSS conf failed."); diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 0e19723f57..60f02ad919 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -270,7 +270,6 @@ nfp_flower_repr_tx_burst(void *tx_queue, uint16_t sent; void *pf_tx_queue; struct nfp_net_txq *txq; - struct nfp_net_hw *pf_hw; struct rte_eth_dev *dev; struct rte_eth_dev *repr_dev; struct nfp_flower_representor *repr; @@ -290,8 +289,7 @@ nfp_flower_repr_tx_burst(void *tx_queue, tx_pkts[i], repr->port_id); /* This points to the PF vNIC that owns this representor */ - pf_hw = txq->hw; - dev = pf_hw->eth_dev; + dev = repr->app_fw_flower->pf_ethdev; /* Only using Tx queue 0 for now. */ pf_tx_queue = dev->data->tx_queues[0]; @@ -306,10 +304,9 @@ nfp_flower_repr_tx_burst(void *tx_queue, } static void -nfp_flower_repr_free_queue(struct nfp_flower_representor *repr) +nfp_flower_repr_free_queue(struct rte_eth_dev *eth_dev) { uint16_t i; - struct rte_eth_dev *eth_dev = repr->eth_dev; for (i = 0; i < eth_dev->data->nb_tx_queues; i++) rte_free(eth_dev->data->tx_queues[i]); @@ -319,10 +316,8 @@ nfp_flower_repr_free_queue(struct nfp_flower_representor *repr) } static void -nfp_flower_pf_repr_close_queue(struct nfp_flower_representor *repr) +nfp_flower_pf_repr_close_queue(struct rte_eth_dev *eth_dev) { - struct rte_eth_dev *eth_dev = repr->eth_dev; - /* * We assume that the DPDK application is stopping all the * threads/queues before calling the device close function. @@ -335,17 +330,18 @@ nfp_flower_pf_repr_close_queue(struct nfp_flower_representor *repr) } static void -nfp_flower_repr_close_queue(struct nfp_flower_representor *repr) +nfp_flower_repr_close_queue(struct rte_eth_dev *eth_dev, + enum nfp_repr_type repr_type) { - switch (repr->repr_type) { + switch (repr_type) { case NFP_REPR_TYPE_PHYS_PORT: - nfp_flower_repr_free_queue(repr); + nfp_flower_repr_free_queue(eth_dev); break; case NFP_REPR_TYPE_PF: - nfp_flower_pf_repr_close_queue(repr); + nfp_flower_pf_repr_close_queue(eth_dev); break; case NFP_REPR_TYPE_VF: - nfp_flower_repr_free_queue(repr); + nfp_flower_repr_free_queue(eth_dev); break; default: PMD_DRV_LOG(ERR, "Unsupported repr port type."); @@ -384,18 +380,18 @@ nfp_flower_pf_repr_uninit(struct rte_eth_dev *eth_dev) } static void -nfp_flower_repr_free(struct nfp_flower_representor *repr, +nfp_flower_repr_free(struct rte_eth_dev *eth_dev, enum nfp_repr_type repr_type) { switch (repr_type) { case NFP_REPR_TYPE_PHYS_PORT: - nfp_flower_repr_uninit(repr->eth_dev); + nfp_flower_repr_uninit(eth_dev); break; case NFP_REPR_TYPE_PF: - nfp_flower_pf_repr_uninit(repr->eth_dev); + nfp_flower_pf_repr_uninit(eth_dev); break; case NFP_REPR_TYPE_VF: - nfp_flower_repr_uninit(repr->eth_dev); + nfp_flower_repr_uninit(eth_dev); break; default: PMD_DRV_LOG(ERR, "Unsupported repr port type."); @@ -425,9 +421,8 @@ nfp_flower_repr_dev_close(struct rte_eth_dev *dev) if (pf_dev->app_fw_id != NFP_APP_FW_FLOWER_NIC) return -EINVAL; - nfp_flower_repr_close_queue(repr); - - nfp_flower_repr_free(repr, repr->repr_type); + nfp_flower_repr_close_queue(dev, repr->repr_type); + nfp_flower_repr_free(dev, repr->repr_type); for (i = 0; i < MAX_FLOWER_VFS; i++) { if (app_fw_flower->vf_reprs[i] != NULL) @@ -575,8 +570,7 @@ nfp_flower_pf_repr_init(struct rte_eth_dev *eth_dev, rte_ether_addr_copy(&init_repr_data->mac_addr, eth_dev->data->mac_addrs); repr->app_fw_flower->pf_repr = repr; - repr->app_fw_flower->pf_hw->eth_dev = eth_dev; - repr->eth_dev = eth_dev; + repr->app_fw_flower->pf_ethdev = eth_dev; return 0; } @@ -668,8 +662,6 @@ nfp_flower_repr_init(struct rte_eth_dev *eth_dev, app_fw_flower->vf_reprs[index] = repr; } - repr->eth_dev = eth_dev; - return 0; mac_cleanup: @@ -684,28 +676,38 @@ static void nfp_flower_repr_free_all(struct nfp_app_fw_flower *app_fw_flower) { uint32_t i; + struct rte_eth_dev *eth_dev; struct nfp_flower_representor *repr; for (i = 0; i < MAX_FLOWER_VFS; i++) { repr = app_fw_flower->vf_reprs[i]; if (repr != NULL) { - nfp_flower_repr_free(repr, NFP_REPR_TYPE_VF); - app_fw_flower->vf_reprs[i] = NULL; + eth_dev = rte_eth_dev_get_by_name(repr->name); + if (eth_dev != NULL) { + nfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_VF); + app_fw_flower->vf_reprs[i] = NULL; + } } } for (i = 0; i < NFP_MAX_PHYPORTS; i++) { repr = app_fw_flower->phy_reprs[i]; if (repr != NULL) { - nfp_flower_repr_free(repr, NFP_REPR_TYPE_PHYS_PORT); - app_fw_flower->phy_reprs[i] = NULL; + eth_dev = rte_eth_dev_get_by_name(repr->name); + if (eth_dev != NULL) { + nfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_PHYS_PORT); + app_fw_flower->phy_reprs[i] = NULL; + } } } repr = app_fw_flower->pf_repr; if (repr != NULL) { - nfp_flower_repr_free(repr, NFP_REPR_TYPE_PF); - app_fw_flower->pf_repr = NULL; + eth_dev = rte_eth_dev_get_by_name(repr->name); + if (eth_dev != NULL) { + nfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_PF); + app_fw_flower->pf_repr = NULL; + } } } @@ -719,7 +721,7 @@ nfp_flower_repr_priv_init(struct nfp_app_fw_flower *app_fw_flower, repr = app_fw_flower->pf_repr; if (repr != NULL) { - eth_dev = repr->eth_dev; + eth_dev = rte_eth_dev_get_by_name(repr->name); if (eth_dev != NULL) eth_dev->process_private = hw_priv; } @@ -727,7 +729,7 @@ nfp_flower_repr_priv_init(struct nfp_app_fw_flower *app_fw_flower, for (i = 0; i < NFP_MAX_PHYPORTS; i++) { repr = app_fw_flower->phy_reprs[i]; if (repr != NULL) { - eth_dev = repr->eth_dev; + eth_dev = rte_eth_dev_get_by_name(repr->name); if (eth_dev != NULL) eth_dev->process_private = hw_priv; } @@ -736,7 +738,7 @@ nfp_flower_repr_priv_init(struct nfp_app_fw_flower *app_fw_flower, for (i = 0; i < MAX_FLOWER_VFS; i++) { repr = app_fw_flower->vf_reprs[i]; if (repr != NULL) { - eth_dev = repr->eth_dev; + eth_dev = rte_eth_dev_get_by_name(repr->name); if (eth_dev != NULL) eth_dev->process_private = hw_priv; } @@ -750,7 +752,6 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower, int i; int ret; const char *pci_name; - struct rte_eth_dev *eth_dev; struct rte_pci_device *pci_dev; struct nfp_eth_table *nfp_eth_table; struct nfp_eth_table_port *eth_port; @@ -760,7 +761,6 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower, }; nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; - eth_dev = app_fw_flower->ctrl_hw->eth_dev; /* Send a NFP_FLOWER_CMSG_TYPE_MAC_REPR cmsg to hardware */ ret = nfp_flower_cmsg_mac_repr(app_fw_flower, nfp_eth_table); @@ -783,7 +783,7 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower, "%s_repr_pf", pci_name); /* Create a eth_dev for this representor */ - ret = rte_eth_dev_create(eth_dev->device, flower_repr.name, + ret = rte_eth_dev_create(&pci_dev->device, flower_repr.name, sizeof(struct nfp_flower_representor), NULL, NULL, nfp_flower_pf_repr_init, &flower_repr); if (ret != 0) { @@ -808,7 +808,7 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower, * Create a eth_dev for this representor. * This will also allocate private memory for the device. */ - ret = rte_eth_dev_create(eth_dev->device, flower_repr.name, + ret = rte_eth_dev_create(&pci_dev->device, flower_repr.name, sizeof(struct nfp_flower_representor), NULL, NULL, nfp_flower_repr_init, &flower_repr); if (ret != 0) { @@ -837,7 +837,7 @@ nfp_flower_repr_alloc(struct nfp_app_fw_flower *app_fw_flower, "%s_repr_vf%d", pci_name, i); /* This will also allocate private memory for the device */ - ret = rte_eth_dev_create(eth_dev->device, flower_repr.name, + ret = rte_eth_dev_create(&pci_dev->device, flower_repr.name, sizeof(struct nfp_flower_representor), NULL, NULL, nfp_flower_repr_init, &flower_repr); if (ret != 0) { diff --git a/drivers/net/nfp/flower/nfp_flower_representor.h b/drivers/net/nfp/flower/nfp_flower_representor.h index 41965f6e0e..d539e53b23 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.h +++ b/drivers/net/nfp/flower/nfp_flower_representor.h @@ -20,7 +20,6 @@ struct nfp_flower_representor { struct rte_ring *ring; struct rte_eth_link link; struct rte_eth_stats repr_stats; - struct rte_eth_dev *eth_dev; }; int nfp_flower_repr_create(struct nfp_app_fw_flower *app_fw_flower, diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 258b617eb2..d450c9472e 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -100,15 +100,14 @@ nfp_devargs_parse(struct nfp_devargs *nfp_devargs_param, static void nfp_net_pf_read_mac(struct nfp_app_fw_nic *app_fw_nic, - uint16_t port) + uint16_t port, + struct nfp_net_hw_priv *hw_priv) { struct nfp_net_hw *hw; - struct nfp_net_hw_priv *hw_priv; struct nfp_eth_table *nfp_eth_table; /* Grab a pointer to the correct physical port */ hw = app_fw_nic->ports[port]; - hw_priv = hw->eth_dev->process_private; nfp_eth_table = hw_priv->pf_dev->nfp_eth_table; @@ -582,17 +581,14 @@ nfp_net_uninit(struct rte_eth_dev *eth_dev) static void nfp_cleanup_port_app_fw_nic(struct nfp_pf_dev *pf_dev, - uint8_t id) + uint8_t id, + struct rte_eth_dev *eth_dev) { - struct rte_eth_dev *eth_dev; struct nfp_app_fw_nic *app_fw_nic; app_fw_nic = pf_dev->app_fw_priv; if (app_fw_nic->ports[id] != NULL) { - eth_dev = app_fw_nic->ports[id]->eth_dev; - if (eth_dev != NULL) - nfp_net_uninit(eth_dev); - + nfp_net_uninit(eth_dev); app_fw_nic->ports[id] = NULL; } } @@ -691,7 +687,7 @@ nfp_net_close(struct rte_eth_dev *dev) if (pf_dev->app_fw_id != NFP_APP_FW_CORE_NIC) return -EINVAL; - nfp_cleanup_port_app_fw_nic(pf_dev, hw->idx); + nfp_cleanup_port_app_fw_nic(pf_dev, hw->idx, dev); for (i = 0; i < app_fw_nic->total_phyports; i++) { id = nfp_function_id_get(pf_dev, i); @@ -971,7 +967,6 @@ nfp_net_init(struct rte_eth_dev *eth_dev) net_hw->tx_bar = pf_dev->qc_bar + tx_base * NFP_QCP_QUEUE_ADDR_SZ; net_hw->rx_bar = pf_dev->qc_bar + rx_base * NFP_QCP_QUEUE_ADDR_SZ; - eth_dev->data->dev_private = net_hw; PMD_INIT_LOG(DEBUG, "ctrl_bar: %p, tx_bar: %p, rx_bar: %p", hw->ctrl_bar, net_hw->tx_bar, net_hw->rx_bar); @@ -1002,7 +997,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev) goto xstats_free; } - nfp_net_pf_read_mac(app_fw_nic, port); + nfp_net_pf_read_mac(app_fw_nic, port, hw_priv); nfp_write_mac(hw, &hw->mac_addr.addr_bytes[0]); if (rte_is_valid_assigned_ether_addr(&hw->mac_addr) == 0) { @@ -1580,7 +1575,6 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) /* Add this device to the PF's array of physical ports */ app_fw_nic->ports[id] = hw; - hw->eth_dev = eth_dev; hw->idx = id; hw->nfp_idx = nfp_eth_table->ports[id].index; @@ -1605,12 +1599,18 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) port_cleanup: for (i = 0; i < app_fw_nic->total_phyports; i++) { - id = nfp_function_id_get(pf_dev, i); - hw = app_fw_nic->ports[id]; + struct rte_eth_dev *eth_dev; - if (hw != NULL && hw->eth_dev != NULL) { - nfp_net_uninit(hw->eth_dev); - rte_eth_dev_release_port(hw->eth_dev); + if (pf_dev->multi_pf.enabled) + snprintf(port_name, sizeof(port_name), "%s", + pf_dev->pci_dev->device.name); + else + snprintf(port_name, sizeof(port_name), "%s_port%u", + pf_dev->pci_dev->device.name, i); + eth_dev = rte_eth_dev_get_by_name(port_name); + if (eth_dev != NULL) { + nfp_net_uninit(eth_dev); + rte_eth_dev_release_port(eth_dev); } } nfp_cpp_area_release_free(pf_dev->ctrl_area); diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 40f314af0a..a4eaed6433 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -167,9 +167,6 @@ struct nfp_net_hw { /** The parent class */ struct nfp_hw super; - /** Backpointer to the eth_dev of this port */ - struct rte_eth_dev *eth_dev; - /** TX pointer ring write back memzone */ const struct rte_memzone *txrwb_mz; From patchwork Fri Apr 19 03:12:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 139523 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 5C24643EA9; Fri, 19 Apr 2024 05:13:58 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D63F940A80; Fri, 19 Apr 2024 05:13:09 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2127.outbound.protection.outlook.com [40.107.237.127]) by mails.dpdk.org (Postfix) with ESMTP id EDA2340A6C for ; Fri, 19 Apr 2024 05:13:07 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bsjZq92NyOKzULC/x69N2b8Hx9ZKPbNB7m9bB0SjivBcr9yg4IdnJ02cfWevoUZUjx5PzGvt99hWquoKiCPUiAHyiQ4sS6H7vaVrLaoZb1/Be9QKJfC62ndpULqUGw4PAvEaBGkrAOHT5NPZxj1D4HPVW8H/SmltgpJzA4sICS1Xa7Ef0ktf3eJ5JNRl0En0Uudn5CfKt8maj7I00IUDmZaYB130u8WrrB3o9mXycN4Bs0yBpEqtQaBMRHI+88ujRpmjuDkrkEZvQtcida6jbch5gtZy7XP8/5VrGcixbhb05UkInNaMkSDkZ1uMm0m9r9O9eJ1sHH4JQgsZ0Sdn4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=ntj1HwsKnkBah8aco6gQDkahRf7A4kAQlfnaFMUkhdQ=; b=n5GBcdeXmGoeUz/Q4XHrGtcLq47PTYo+PrBngI3pucOxPRWhrohCCW82BuNCces39LQncb4UZSi/5yevc2FMwmyQEEH/mgz9emcY+xeb45aSK6VJf7pxU5WxLf2dZUr0Ix4U/HHxqgYEwhup9uOwQ6TFF16DIHh5RGecL0yReMmHNWVB1X1c+HDs27h3TWsdjZaTsNa7phv96iDqUxKN2LsiJDev5bn7McMJ0g2g7i7aLVi82jbZJzw8sd1ICX5lRb/aZvqNO2XGRQ5wIXxhTbVEbHqMU7/+dv+6sdmRybWhiGfxVV6spux2RTQPvQ87AY2M3dgilT7k+duIaU/ARA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ntj1HwsKnkBah8aco6gQDkahRf7A4kAQlfnaFMUkhdQ=; b=lWJoFtkODo6ZW5Jxmsmt41I21w1odKGGVZNdcFiiy/zKWPgtP5JRIByT4k5DFC9ISEG/dysKMeW+TghE5lTUgnGo3xiRMMexF1S9UHQtKLm13R7EoKBzG1KXleJgByFQiOfDg0flN5DdttDHVPJGksglFROlgwAhR9f8kILYhWk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by BY1PR13MB6310.namprd13.prod.outlook.com (2603:10b6:a03:52e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.38; Fri, 19 Apr 2024 03:13:06 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::ec12:7411:559a:850e%5]) with mapi id 15.20.7472.042; Fri, 19 Apr 2024 03:13:06 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , Long Wu , Peng Zhang Subject: [PATCH 8/8] net/nfp: unify port create and destroy interface Date: Fri, 19 Apr 2024 11:12:26 +0800 Message-Id: <20240419031226.1191069-9-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240419031226.1191069-1-chaoyong.he@corigine.com> References: <20240419031226.1191069-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0044.apcprd01.prod.exchangelabs.com (2603:1096:4:193::8) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BY1PR13MB6310:EE_ X-MS-Office365-Filtering-Correlation-Id: 92598a2a-b9f2-4cf0-160c-08dc601ea219 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hmkhjR/2Ln/BhxKdgmA3E95DgH5rQQiAa21n7Pq79foofr6XS7tVdHULGzQVS8llFQ1/Lwts+I4DCu5nb0vdgEdNslBRuaxVc/15ZDWbQmGzmj87fKo0YfSAZLSsT1w+EdFNHaYk4ETGLUQfZRtaSLV3WErsk0T7Et9E2LNRl6tn61NjeV3fddrc+rEabsGyxtQkyMeBNwlQYK320SIUbw/nKQrvbuEuVaRwt+d7BtV7YXH+llFrbjE1hd64FrIq5wggInU44q+Ic1Qo8GWeo6Y081Ok3qf1crgtFV9SA9eaZOyxMloxzOU41Vm+Hg85QjIxvn9UJA2Ozho/EBrWIyHJOqYSl0Ch6nClL3JqYhfDJiB4aJx1jmshoz2ciNPkGjz3Vv6M4DpiVtCToTxAT/1tq8mbikKg0kKmsEtgHgaL5UUOXG/k+n/cH3A5clKcmucsXrFLajyxYJIoglSn6AO7ylhwrlvDaLLy9IQCpLWzMjxnIaRslNJ1BrDgrr91rgCkfrhzc2BmcDTFxFYRjlAhSvRpLNL9BmOPvKXXCvejNnC/V97Q3fazPR32zi/Rziq/FaNCJ4wPVNliqDf8mJEGJyosDmOJzN3I3/iThG8dsrqen+Amnfs4NNAf4gOcKQJzGsiLLYHG7g2Eg7IA/StvW0ImNV2im4I3NF/LFpy5ZA8Hy0z67oe8/O7vzkDhB4ax3F10ZRTzLW/775h6SiQlBFxAdKuHa1pqf/0uJzpxP7D7WhGMT8juHvtCJvY+TfhvQQHA2JZ+yq6YMMpFwalPWZf8LZ/R7YaHboTWiEJ1e3EcGSP5tNLryYu4ywAAa1pT4hzdjobUJ1cJau0BB45Ck+k/CDGz2gwOJoK6+Pi8wdhLEKlG/IyIxEMKJMJ//YmSUm8d1b1G8dEw75Hnx5W1T7MDXRvYGunU8S5kQxuBspS5gjd+Fke8XvsjY8XIde+72GwUFbJczwHYGsZK1eZSdMJmKCer5BjU2muGR6fgvTT84KVEfHB0TCqFom9HZTR292wZVbJgu1WShACd785BeouvQGP7MbaSzB9fmH6vgh/RhmYzTfuRd0ffxits80OXecYXgR6B8R0x9gtH6J88YlRc61y4AF8ZTz5PL3wI3OK1GEzBC276Vk+vXilD6t9CbhkI+pHtcCeGyWAuML/jALU0/VNWa0dYMXg3ss3I/oDwHBN10CPuJBotqaWgnsWIje8xAkFeMtN7+wwWgnlri6oNAKMMQhnH1p7mZoHzr7YLOitqaJfl3f6Yy9ibnQaac4zUd3Zn9VTTj+w4o0A1FZpRZeVy7FZZnZ8FyTZSHHBgb6tD7EcEJub9k8dGUFIZuFHx4AJzIA0S9I1PdQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(52116005)(376005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: C4wc3uQbLa0MJ1chmuSa9te+mIAOcYduATX/+hoDbS+gM1Y2dmvnUIKM4w2lafN+AAunne0fnk/a0welo9nWqlGVJVzDfT/5tFl9HaL5QDmKhC5tTeGNkuu2mfFi7gauLd3CnPpFLT8j+9Nj39sRfHlREpNBIC8snnBXSiEgqJHYoCx14OErLO0lt07EG3yitf+4rsf+zHJ4tEHdpYQGVT5bqZiWhqd6J0y9cDhDOVlwrOCuMSbmQI3tUhVYH/0JUyugcRqSDemVKSb920Xv52jRaI/BSw1VDAcnBa4ZP38RWolMf9QcKzuMalFHQcETHXgQRBfwCFf+p5V2iKjD31lqBEsUJxCRD+PfrcJ/yqpCzdJElJsWEbUNEmVRWNI0xn2BTF4Rh9b7TMYBLXekYyWbxH4PZv4Q5m8Oqs3AG6oXvcfZMiV97tb0g6m9E2zqgmKFQy7j52ii9CF6QepPDl2L1//VcvIckIjHuFEoZYgq3+AiKY/E61Zf8yNFWXvQvJv6wMi2Sam4i68HrdfABaz2GgNVDo5gSY99kzhOoK6pvl+wPzLR6pJUoeImDy/xVGJDHKziaJS77wiwSHSHZirgnYK3mm80fM3RvxzczHUvyAavoD5juhFFOSA6aPJNEXAR+6TFypwpKz/Djc3BeyXqXLIh0z7FQF4eXEFSeZf98GrcrM7wl5+ckBhcTfJZ3xAYF9BjR2F4xRg9Ab1y8flH9ZgwQdf3RV/SxW+5okqyOkN/QI6i8Kcknlp03GWb+o7+Rsr22YXJIlS3Rw5/VT16Y2rZZvmPoPSesXQ/zuTisr7AMOwje4yD8ep8hwrsvseiLH4R9gdYKA58k5nHI7ijn7pj50spOR9g+ny8JbsO+3TNEoD/ifJlGRNA7zTvdMV+TNXFVBqauQ3xus48BZg33XXv9rOsrVxri67Z1fH5AUFS8MPmLkNypQAIlonT4reOcJRKDGSPpxm0myjsGnauqDarxLT2+2BD+GcvHvyq+AYYjwHmZsHtwCkI9S6r1rMgmvBQF9nP8wEGoxyrs25AIJ6Iod28chDdl8mFYtBtq1SYYhn+7ZP0gHj/6U+HwipXlZYqTwZq2tdx4jhHeZ6LwEJ4WZPf2y0KL/tJ2IDB+XvgWrPL8+nDB21L1vfVMDpNoO1A2LPvDeaLZlC2OzMsM7DkSEKZiaBOMO+VbJS3Qo86dGbOFK2M85WSKO9zOXEqo5zLtzVajQT7rb78aeu4gSkrEbMrGw5pgswn9Ptu8Eih3J11JwMgpvFUnRe5ME0A1Kwl+qJZbtwpLgeN2+AoR5oC4nTl39EhpsZat3Ge6BVK90VkFSdHHnu9PB3ZSrO++4hToLVVfRBPuvfsFqjW9oc8xJVVoVDyAPqsjWNoQmHFC2TgNUrwO+oKpiLneK+Qa9C/vwh9yGD6hBjRUtCKZoxFE/WBSwxm6GL2z+C+JWdF72At7bL6O20mRN/MOb5uShx8Se1bcp6Eta0JKN1mAC0JsIYm4YLZ6VUV5LtIiR0Juz5YpcHIWK8QV3HQ97rUojJTwa2K/lvJrN84FQrAWIkqjp4e8/UoKJIphw3PL7yFzgS5sezR9gyvtSHKakicAhSd0YrL561mG4ELEA== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 92598a2a-b9f2-4cf0-160c-08dc601ea219 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2024 03:13:06.7563 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Urdw9Jv5+CxIV2AmLAxu4SAwXVO8GpoR1Ds66KsKwOeQqocdczE4RpDreaDL1EhiNpmkyhd7jYFRHf9SZjj8Us8duw/GUYWOFTMXyK4VeVs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR13MB6310 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 The interface 'rte_eth_dev_create()' and 'rte_eth_dev_destroy()' are available for both primary and secondary process. Signed-off-by: Chaoyong He Signed-off-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/flower/nfp_flower.c | 31 +++-- .../net/nfp/flower/nfp_flower_representor.c | 18 +-- drivers/net/nfp/nfp_ethdev.c | 112 +++++++++--------- 3 files changed, 80 insertions(+), 81 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index fba8410c58..13fcadd71d 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -798,25 +798,36 @@ nfp_uninit_app_fw_flower(struct nfp_net_hw_priv *hw_priv) rte_free(app_fw_flower); } +static int +nfp_secondary_flower_init(struct rte_eth_dev *eth_dev, + void *para) +{ + eth_dev->process_private = para; + eth_dev->dev_ops = &nfp_flower_pf_vnic_ops; + eth_dev->rx_pkt_burst = nfp_net_recv_pkts; + eth_dev->tx_pkt_burst = nfp_flower_pf_xmit_pkts; + + return 0; +} + int nfp_secondary_init_app_fw_flower(struct nfp_net_hw_priv *hw_priv) { - struct rte_eth_dev *eth_dev; - const char *port_name = "pf_vnic_eth_dev"; + int ret; + const char *pci_name; + char port_name[RTE_ETH_NAME_MAX_LEN]; + + pci_name = strchr(hw_priv->pf_dev->pci_dev->name, ':') + 1; + snprintf(port_name, RTE_ETH_NAME_MAX_LEN, "%s_repr_pf", pci_name); PMD_INIT_LOG(DEBUG, "Secondary attaching to port %s", port_name); - eth_dev = rte_eth_dev_attach_secondary(port_name); - if (eth_dev == NULL) { + ret = rte_eth_dev_create(&hw_priv->pf_dev->pci_dev->device, port_name, 0, NULL, + NULL, nfp_secondary_flower_init, hw_priv); + if (ret != 0) { PMD_INIT_LOG(ERR, "Secondary process attach to port %s failed", port_name); return -ENODEV; } - eth_dev->process_private = hw_priv; - eth_dev->dev_ops = &nfp_flower_pf_vnic_ops; - eth_dev->rx_pkt_burst = nfp_net_recv_pkts; - eth_dev->tx_pkt_burst = nfp_flower_pf_xmit_pkts; - rte_eth_dev_probing_finish(eth_dev); - return 0; } diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 60f02ad919..f9001ab1f0 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -683,10 +683,8 @@ nfp_flower_repr_free_all(struct nfp_app_fw_flower *app_fw_flower) repr = app_fw_flower->vf_reprs[i]; if (repr != NULL) { eth_dev = rte_eth_dev_get_by_name(repr->name); - if (eth_dev != NULL) { - nfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_VF); - app_fw_flower->vf_reprs[i] = NULL; - } + if (eth_dev != NULL) + rte_eth_dev_destroy(eth_dev, nfp_flower_repr_uninit); } } @@ -694,20 +692,16 @@ nfp_flower_repr_free_all(struct nfp_app_fw_flower *app_fw_flower) repr = app_fw_flower->phy_reprs[i]; if (repr != NULL) { eth_dev = rte_eth_dev_get_by_name(repr->name); - if (eth_dev != NULL) { - nfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_PHYS_PORT); - app_fw_flower->phy_reprs[i] = NULL; - } + if (eth_dev != NULL) + rte_eth_dev_destroy(eth_dev, nfp_flower_repr_uninit); } } repr = app_fw_flower->pf_repr; if (repr != NULL) { eth_dev = rte_eth_dev_get_by_name(repr->name); - if (eth_dev != NULL) { - nfp_flower_repr_free(eth_dev, NFP_REPR_TYPE_PF); - app_fw_flower->pf_repr = NULL; - } + if (eth_dev != NULL) + rte_eth_dev_destroy(eth_dev, nfp_flower_pf_repr_uninit); } } diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index d450c9472e..cdc946faff 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -34,6 +34,16 @@ #define NFP_PF_DRIVER_NAME net_nfp_pf #define NFP_PF_FORCE_RELOAD_FW "force_reload_fw" +struct nfp_net_init { + /** Sequential physical port number, only valid for CoreNIC firmware */ + uint8_t idx; + + /** Internal port number as seen from NFP */ + uint8_t nfp_idx; + + struct nfp_net_hw_priv *hw_priv; +}; + static int nfp_devarg_handle_int(const char *key, const char *value, @@ -559,7 +569,7 @@ nfp_net_keepalive_stop(struct nfp_multi_pf *multi_pf) rte_eal_alarm_cancel(nfp_net_beat_timer, (void *)multi_pf); } -static void +static int nfp_net_uninit(struct rte_eth_dev *eth_dev) { struct nfp_net_hw *net_hw; @@ -577,6 +587,8 @@ nfp_net_uninit(struct rte_eth_dev *eth_dev) nfp_ipsec_uninit(eth_dev); if (net_hw->mac_stats_area != NULL) nfp_cpp_area_release_free(net_hw->mac_stats_area); + + return 0; } static void @@ -875,7 +887,8 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, } static int -nfp_net_init(struct rte_eth_dev *eth_dev) +nfp_net_init(struct rte_eth_dev *eth_dev, + void *para) { int err; uint16_t port; @@ -884,6 +897,7 @@ nfp_net_init(struct rte_eth_dev *eth_dev) struct nfp_hw *hw; struct nfp_net_hw *net_hw; struct nfp_pf_dev *pf_dev; + struct nfp_net_init *hw_init; struct rte_pci_device *pci_dev; struct nfp_net_hw_priv *hw_priv; struct nfp_app_fw_nic *app_fw_nic; @@ -891,6 +905,11 @@ nfp_net_init(struct rte_eth_dev *eth_dev) pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); net_hw = eth_dev->data->dev_private; + hw_init = para; + net_hw->idx = hw_init->idx; + net_hw->nfp_idx = hw_init->nfp_idx; + eth_dev->process_private = hw_init->hw_priv; + /* Use backpointer here to the PF of this eth_dev */ hw_priv = eth_dev->process_private; pf_dev = hw_priv->pf_dev; @@ -898,7 +917,10 @@ nfp_net_init(struct rte_eth_dev *eth_dev) /* Use backpointer to the CoreNIC app struct */ app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(pf_dev->app_fw_priv); - port = ((struct nfp_net_hw *)eth_dev->data->dev_private)->idx; + /* Add this device to the PF's array of physical ports */ + app_fw_nic->ports[net_hw->idx] = net_hw; + + port = net_hw->idx; if (port > 7) { PMD_DRV_LOG(ERR, "Port value is wrong"); return -ENODEV; @@ -1475,15 +1497,15 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) uint8_t id; int ret = 0; uint32_t total_vnics; - struct nfp_net_hw *hw; - unsigned int numa_node; - struct rte_eth_dev *eth_dev; struct nfp_app_fw_nic *app_fw_nic; struct nfp_eth_table *nfp_eth_table; char bar_name[RTE_ETH_NAME_MAX_LEN]; char port_name[RTE_ETH_NAME_MAX_LEN]; char vnic_name[RTE_ETH_NAME_MAX_LEN]; struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; + struct nfp_net_init hw_init = { + .hw_priv = hw_priv, + }; nfp_eth_table = pf_dev->nfp_eth_table; PMD_INIT_LOG(INFO, "Total physical ports: %d", nfp_eth_table->count); @@ -1543,7 +1565,6 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) PMD_INIT_LOG(DEBUG, "ctrl bar: %p", pf_dev->ctrl_bar); /* Loop through all physical ports on PF */ - numa_node = rte_socket_id(); for (i = 0; i < app_fw_nic->total_phyports; i++) { if (pf_dev->multi_pf.enabled) snprintf(port_name, sizeof(port_name), "%s", @@ -1552,46 +1573,14 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) snprintf(port_name, sizeof(port_name), "%s_port%u", pf_dev->pci_dev->device.name, i); - /* Allocate a eth_dev for this phyport */ - eth_dev = rte_eth_dev_allocate(port_name); - if (eth_dev == NULL) { - ret = -ENODEV; - goto port_cleanup; - } - - /* Allocate memory for this phyport */ - eth_dev->data->dev_private = rte_zmalloc_socket(port_name, - sizeof(struct nfp_net_hw), - RTE_CACHE_LINE_SIZE, numa_node); - if (eth_dev->data->dev_private == NULL) { - ret = -ENOMEM; - rte_eth_dev_release_port(eth_dev); - goto port_cleanup; - } - - hw = eth_dev->data->dev_private; id = nfp_function_id_get(pf_dev, i); - - /* Add this device to the PF's array of physical ports */ - app_fw_nic->ports[id] = hw; - - hw->idx = id; - hw->nfp_idx = nfp_eth_table->ports[id].index; - - eth_dev->device = &pf_dev->pci_dev->device; - eth_dev->process_private = hw_priv; - - /* - * Ctrl/tx/rx BAR mappings and remaining init happens in - * @nfp_net_init() - */ - ret = nfp_net_init(eth_dev); - if (ret != 0) { - ret = -ENODEV; + hw_init.idx = id; + hw_init.nfp_idx = nfp_eth_table->ports[id].index; + ret = rte_eth_dev_create(&pf_dev->pci_dev->device, port_name, + sizeof(struct nfp_net_hw), NULL, NULL, + nfp_net_init, &hw_init); + if (ret != 0) goto port_cleanup; - } - - rte_eth_dev_probing_finish(eth_dev); } /* End loop, all ports on this PF */ @@ -1608,10 +1597,8 @@ nfp_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) snprintf(port_name, sizeof(port_name), "%s_port%u", pf_dev->pci_dev->device.name, i); eth_dev = rte_eth_dev_get_by_name(port_name); - if (eth_dev != NULL) { - nfp_net_uninit(eth_dev); - rte_eth_dev_release_port(eth_dev); - } + if (eth_dev != NULL) + rte_eth_dev_destroy(eth_dev, nfp_net_uninit); } nfp_cpp_area_release_free(pf_dev->ctrl_area); app_cleanup: @@ -2012,6 +1999,20 @@ nfp_pf_init(struct rte_pci_device *pci_dev) return ret; } +static int +nfp_secondary_net_init(struct rte_eth_dev *eth_dev, + void *para) +{ + struct nfp_net_hw *net_hw; + + net_hw = eth_dev->data->dev_private; + nfp_net_ethdev_ops_mount(net_hw, eth_dev); + + eth_dev->process_private = para; + + return 0; +} + static int nfp_secondary_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) { @@ -2020,7 +2021,6 @@ nfp_secondary_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) int ret = 0; uint8_t function_id; uint32_t total_vnics; - struct nfp_net_hw *hw; char pf_name[RTE_ETH_NAME_MAX_LEN]; struct nfp_pf_dev *pf_dev = hw_priv->pf_dev; @@ -2034,7 +2034,6 @@ nfp_secondary_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) } for (i = 0; i < total_vnics; i++) { - struct rte_eth_dev *eth_dev; char port_name[RTE_ETH_NAME_MAX_LEN]; if (nfp_check_multi_pf_from_fw(total_vnics)) @@ -2045,18 +2044,13 @@ nfp_secondary_init_app_fw_nic(struct nfp_net_hw_priv *hw_priv) pf_dev->pci_dev->device.name, i); PMD_INIT_LOG(DEBUG, "Secondary attaching to port %s", port_name); - eth_dev = rte_eth_dev_attach_secondary(port_name); - if (eth_dev == NULL) { + ret = rte_eth_dev_create(&pf_dev->pci_dev->device, port_name, 0, + NULL, NULL, nfp_secondary_net_init, hw_priv); + if (ret != 0) { PMD_INIT_LOG(ERR, "Secondary process attach to port %s failed", port_name); ret = -ENODEV; break; } - - eth_dev->process_private = hw_priv; - hw = eth_dev->data->dev_private; - nfp_net_ethdev_ops_mount(hw, eth_dev); - - rte_eth_dev_probing_finish(eth_dev); } return ret;