From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id CA28545B90; Mon, 21 Oct 2024 08:34:40 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EB4E340677; Mon, 21 Oct 2024 08:33:44 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam02on2106.outbound.protection.outlook.com [40.107.212.106]) by mails.dpdk.org (Postfix) with ESMTP id 1576740666 for ; Mon, 21 Oct 2024 08:33:41 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vRgozRCxWEjw2Os5wO/+RKzNVnGoOwWHialQG3fjPSy18t0/OpsLMJ86udkDGItCCKZIs5YbrixZJ2OCJqfmRIpr6f6EenaFiNowy4BpY3YsDo3f3otGzZjk+wHLJTKsw/LpZWJdnOv7PxRXgIynqCDBwt3dXO2jxZ7Ki5yl4hGirTx2loYgTFIrFoGWrEFn1vjowI9EcM7mvBbprISh+nMIBv8Hd3mLht1RqLRiK+QRQHjBQCeC0fvjGuvbtjDLwyB3vgib2p68yKNbgfYNefqBJ7bk8tnPtH6RrL3ZGL40odLqcdoJ6mCuQllpRlOV0NOSn242iLM9y1jFFTZbjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DJoIRy+InQgxrvQV50PEjF553vSaQlgJuhL6qji6upo=; b=oerbNUwtBbW6qcN6IqFrroGkN6YKzjNFPiB7G0zIt8w8JXevM7TqMMmt++Z+bFoROcp3lJih/sxyFAHpKPJTEH4itx0Weh76Y2VYor+H5Zfq4vGybEwiMYOhoiSMjQdf5v0P+pCOgMXu31PDzSg0KK4XR2Q4OqRLA2Gf833+jZVel/+j59Hoga1O9a6lwVsvPudOBhT5NUIBd7s9tUPTPchAf2qfOpEPLAYSc7OYwrOPTY7L005U/N+MmEk400J2Wykjdf+1ddok5VrZjswrkpfBPV+fVfVnd4v0Q1hb1S2UIcz2qm9d5jsI/S8gDS7OLjp56EWSciG2NpxDrNo/FA== 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=DJoIRy+InQgxrvQV50PEjF553vSaQlgJuhL6qji6upo=; b=mqnpHSgKuKzdq0fe2UpyFRsbOa4qbqdS0m4ommDdnSySVkc/W9Nwk5p6OTBE5qv/BmRo1NXETFL9XwKSmMiSMwGrl0xnU8mYtOSIhmvDfb7pxfox0YGAgtWjp/IwO6qOgmjXOBrg6f+PrARqTdEhTkOUmUeN4rT37P1IeVd3S80= 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 SN7PR13MB6132.namprd13.prod.outlook.com (2603:10b6:806:355::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8069.28; Mon, 21 Oct 2024 06:33:39 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::b900:5f05:766f:833]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::b900:5f05:766f:833%5]) with mapi id 15.20.8069.024; Mon, 21 Oct 2024 06:33:39 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Peng Zhang , Chaoyong He , Long Wu Subject: [PATCH 9/9] net/nfp: update the Tx and Rx function for multiple PF Date: Mon, 21 Oct 2024 14:33:01 +0800 Message-Id: <20241021063301.4146214-10-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20241021063301.4146214-1-chaoyong.he@corigine.com> References: <20241021063301.4146214-1-chaoyong.he@corigine.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SG2PR03CA0118.apcprd03.prod.outlook.com (2603:1096:4:91::22) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|SN7PR13MB6132:EE_ X-MS-Office365-Filtering-Correlation-Id: 28a0a803-96fa-44be-140a-08dcf19a4c88 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|376014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v+vGU6cyV0aBbkM+tcaJLMdL9gjwypToYOFmmJdwJk4ltuYaij8SfAhYIPoT?= =?us-ascii?Q?yvaloURiDKBpgmJOlyDMzOTU+w2CYk7jybOvc0INtmRUvJW/xfrov8FQFXCk?= =?us-ascii?Q?uqSoBHS9Pdw9GKz16veCvWBmhWbNKs1Sw3Y5d4Juiwjtk+ymgSwBV66RgFIP?= =?us-ascii?Q?MitG7qSCii1pF5oBkwZ/Xzdo/NwzLmmwBkxYgi3um5bkzGpescGbsHnPfIhg?= =?us-ascii?Q?QRbOfI1JSPRT1XnxSjsnICccJrSsyJuz4rgBRx5g9Kf3J0STWF1LvS3e5bR2?= =?us-ascii?Q?GwaQEzZRqOV3Eex1LW/aiRSV8rT2mpKleWIuu4zxGS1zS5ZduYPNoIFlx2F0?= =?us-ascii?Q?dtHU4qfDhQK9FFSGutF5lwH3nE+1cR/ywt/mS3GowpeVuyNB4oWalwO6mf7u?= =?us-ascii?Q?R5Jwprum1Xu5KLCw7ynnAh/qpYE4Zx9z7XRZX0elDHc+eTYjdC6tLUyBTdwB?= =?us-ascii?Q?Ysrwyc/YM9zVYgm1bmBn072BVbE/ZO9T2VZ4bFcoib1iFeFIrCOjIbyYWniE?= =?us-ascii?Q?czoOvomI2z41YWDwNAa/eYpOgaY+wDFjIlBZhCeQuuRJ6Eb/LmAyfMRWOLZM?= =?us-ascii?Q?qAo8+Ye1CXSETJpfZ5+Wyld9fTdyGtsRXVP1QVloY1X4JsgBQ4iefDzWEprS?= =?us-ascii?Q?PzE8GWzl+bn+qaZo+0C77wvqNZ6l3irvxwCzKQLDwMIsMmDd/Q9VL5BGVVSo?= =?us-ascii?Q?nCfEUoW8C5Q7pQByYU3L7HoUfxYAHY1o3r21ENjUM3jwF+/vv3E2kbxER6mA?= =?us-ascii?Q?FlbOYANXkg2LevHaUo0eOh914goqnsd5vZsMoXeLszGbIq6pwBdkO2ljBcz0?= =?us-ascii?Q?HOnKNhfUE4HDO72MZni8TrQMLbuiDOiI5HoNXO74Ncva9mpnsXtZfnAwcbLG?= =?us-ascii?Q?PW5D9wQ/VV4AG5Jxd7+NZqxY7M65bBphakY2rcq3Po+s8H+qCDIAZmqY4YMs?= =?us-ascii?Q?d5TKghavYecUjE07ZtbFeD3zUZgxsEPtIngbAHTy3qiPq/72kD8bvnlfgk+b?= =?us-ascii?Q?MGnV2JAGPBgyqXUoHsEb6k6Jic/nBhI5Yu3SkgVpqoQL6eSbmsx3x1sqkePw?= =?us-ascii?Q?Pup5U8t4RUNOBiH9YSKKHajSahzHvE/kTPY+K4GekNnR0x4QSmO/z9WJ8rFH?= =?us-ascii?Q?SLQl8XvC3E6/N1KtKID8+8LowUrrJpp93itd+rxC3laaljsv8M3T4HR30ZTi?= =?us-ascii?Q?vpGD3+eqQ1ytjti5pnTx77fMgW369UHHbTDB6vHTBWtsB01SgKOFJHsB6MTJ?= =?us-ascii?Q?erQjZPe/cG0Uth1Dzvk5GrX5zYga6gMd5IV7ww+lD40LRz8S24jd63J+a39W?= =?us-ascii?Q?QjiOY9YkaifdX6kmb25UR8O12EqKvmakmOrGOafi+yeMdok9I4EKh8X4WmFo?= =?us-ascii?Q?aZgiu7c=3D?= 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:(13230040)(52116014)(376014)(366016)(1800799024)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?BYp0+chi4cmhTD1S+fIhQviITmIjgqPGjYAznyGqKsU22OSyE3cgTiQmBHKZ?= =?us-ascii?Q?98oAR/+e4pQyKttmjrEP8UGpBV46r5QsdYyMsop5JUHAY2QQTokBh9kg1WX3?= =?us-ascii?Q?K6FzP5xXy2wibFamf7nvLYsWqTvVexsqGevFhVifUpalWXRE36wwLJaEGXtZ?= =?us-ascii?Q?OHJz8NNUjbxPThxLKxvFkUc+VqMclmR/TIW0dUgNsSrWtCW1b4H3fhbm5t7I?= =?us-ascii?Q?QLf0dDTd6IhRvCmTyGFLe7kmrlGrsGQZmh20a41BQqNN0rGk6WUHZmNxBVll?= =?us-ascii?Q?LerM9edA4cGNUx22rTZqYzroP0Q37TBLspk7jU8RXR2etvdKmfuUYGewHlNR?= =?us-ascii?Q?+G8sypz9+ndTSlL05SmHBxeIdVmM+q5O8P/jItmEhx35GEaBeFO/xYp8Gm8X?= =?us-ascii?Q?KMU/nOfDXvGtETes1Cf5Vo1/KiCubwFY9H3UzgQdwHN+50PNkp7DieFR6oke?= =?us-ascii?Q?B30P3avPi/vIHbuRe6u1ztIVVkrmWwcGHXrvK24/w1NT0FpR3HZ2EaupLlBd?= =?us-ascii?Q?xYhsOIq6Ave43iaIaYfrwun6P5UJkH+eVXivf8mzTPKN/v7CaVoEIRs/deTK?= =?us-ascii?Q?xavOpQJY1+9ZER2snrO4XCfCznx2MscDp4ReZFzwt6CP3atob3+Ky9mczJZz?= =?us-ascii?Q?/2TTTEwQXc05wmpm2mGQlG7+iCecVsJE/T8tjjwvMtGZbVUJYXiMwZkiEO2d?= =?us-ascii?Q?cS2Eb9SpEg43aXZdo4CcO4ckUY5UQsXnLmqidcTyOAFEbLaRFx0nKKr3b7ea?= =?us-ascii?Q?f65gQLQTnxg7NgGSHB0BwE9F7S4x4M+YGOTEmTzTa5qMjRa6QLWxKLPvwQXB?= =?us-ascii?Q?eAYDbFh6zDsfjqBk+24sk3Yob6UZvRnDeY8o/S/tFWh1Ge8QjznG+IuygsRx?= =?us-ascii?Q?eWsEpfsZx9xQvIJ/4e/VkbXr2bCvUySlQiSNlGZQbtsmalIz81LhOgZOrfxG?= =?us-ascii?Q?WsoOTirRh/7FKNo50qgplknE2b9ZecFSIb8Nq6ezQbHlopYjc/UHTJZx63zU?= =?us-ascii?Q?3PpDr0mz/yR+640+ePacJAOE4D4YhHONwXQTonPmvSfGCV4KesqrTXttefrB?= =?us-ascii?Q?qmMTY2SxJf0Chv1c/jnCcoKymGKAdVjb/30e2KiaXthFbKAypLPxUSfkIgDh?= =?us-ascii?Q?SLwe94Qm2L+DSVYPyeNQ5ZOcAcb+lTrwDjl//Dcq9bZAvDof5GKFFOop1pgr?= =?us-ascii?Q?XxuBFKm/2MTVGCXpV1p7AtYXAFYtFzrylevdomeK+WRQF5j0IXg7srpq2eQt?= =?us-ascii?Q?kIw9pAWFxtyn4Kfl5FLIdPVWjRkCO+3n0dKDuFYJ5ujTkBQIREmC94z06byb?= =?us-ascii?Q?VzUrc4jHiO0cwZVa8dMMV3J7m2aI3weWTM5D9ud6xeOnCffg/n6J4EDiAul8?= =?us-ascii?Q?cPhNMG3Bnu6MqOoj1Zdb3QalXzF1+Kfb8vXOucPlOb3sCgJkkuXxyMpNorvF?= =?us-ascii?Q?3wbk8+hxgXaym28WPz1NkXuJoAeux7b4l+AGOm965nvf7C09UuJ9TCAcEgny?= =?us-ascii?Q?5uLf81XxTEcab2NT5FYbArrfDTpCbe7/IE+g4ze/7lG7C9xUOE5DQxHGv87n?= =?us-ascii?Q?v8bdGmFrZhTHXq8DMEK6X99eCjrahpz0Zvm3jLIA/KTDMH/t9453kAU2uQHJ?= =?us-ascii?Q?YQ=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28a0a803-96fa-44be-140a-08dcf19a4c88 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2024 06:33:39.4144 (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: JvYLilX9zktshm2+ZLRvJyZAZovTqx4oVpGSpC9QQ/PdE53hJCXo1WBVuVNT75zx8twA5fka26DEQ6y73xeXouAScNcFaLo+cZ4c/1pNX+c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR13MB6132 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 From: Peng Zhang Update the Tx function and Rx function for multiple PF and simplify the Rx function to enhance the performance. In the RX function, the packets are processed according the firmware type. Signed-off-by: Peng Zhang Reviewed-by: Chaoyong He Reviewed-by: Long Wu --- drivers/net/nfp/flower/nfp_flower.c | 70 +++++++++++++++++++ drivers/net/nfp/flower/nfp_flower.h | 6 ++ drivers/net/nfp/flower/nfp_flower_cmsg.h | 7 ++ .../net/nfp/flower/nfp_flower_representor.c | 4 +- drivers/net/nfp/nfp_ethdev.c | 6 ++ drivers/net/nfp/nfp_ethdev_vf.c | 6 ++ drivers/net/nfp/nfp_net_common.c | 48 +++++++++++++ drivers/net/nfp/nfp_net_common.h | 4 ++ drivers/net/nfp/nfp_rxtx.c | 14 ++-- 9 files changed, 158 insertions(+), 7 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index df7a150a99..f087d0dfdc 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -215,6 +215,76 @@ nfp_flower_pf_xmit_pkts(void *tx_queue, return app_fw_flower->nfd_func.pf_xmit_t(tx_queue, tx_pkts, nb_pkts); } +uint16_t +nfp_flower_multiple_pf_recv_pkts(void *rx_queue, + struct rte_mbuf **rx_pkts, + uint16_t nb_pkts) +{ + int i; + uint16_t recv; + uint32_t data_len; + struct nfp_net_rxq *rxq; + struct rte_eth_dev *repr_dev; + struct nfp_flower_representor *repr; + + recv = nfp_net_recv_pkts(rx_queue, rx_pkts, nb_pkts); + if (recv != 0) { + /* Grab a handle to the representor struct */ + rxq = rx_queue; + repr_dev = &rte_eth_devices[rxq->port_id]; + repr = repr_dev->data->dev_private; + + data_len = 0; + for (i = 0; i < recv; i++) + data_len += rx_pkts[i]->data_len; + + repr->repr_stats.ipackets += recv; + repr->repr_stats.q_ipackets[rxq->qidx] += recv; + repr->repr_stats.q_ibytes[rxq->qidx] += data_len; + } + + return recv; +} + +uint16_t +nfp_flower_multiple_pf_xmit_pkts(void *tx_queue, + struct rte_mbuf **tx_pkts, + uint16_t nb_pkts) +{ + int i; + uint16_t sent; + uint32_t data_len; + struct nfp_net_txq *txq; + struct rte_eth_dev *repr_dev; + struct nfp_flower_representor *repr; + + txq = tx_queue; + if (unlikely(txq == NULL)) { + PMD_TX_LOG(ERR, "TX Bad queue."); + return 0; + } + + /* Grab a handle to the representor struct */ + repr_dev = &rte_eth_devices[txq->port_id]; + repr = repr_dev->data->dev_private; + for (i = 0; i < nb_pkts; i++) + nfp_flower_pkt_add_metadata(repr->app_fw_flower, + tx_pkts[i], repr->port_id); + + sent = nfp_flower_pf_xmit_pkts(tx_queue, tx_pkts, nb_pkts); + if (sent != 0) { + data_len = 0; + for (i = 0; i < sent; i++) + data_len += tx_pkts[i]->data_len; + + repr->repr_stats.opackets += sent; + repr->repr_stats.q_opackets[txq->qidx] += sent; + repr->repr_stats.q_obytes[txq->qidx] += data_len; + } + + return sent; +} + static int nfp_flower_init_vnic_common(struct nfp_net_hw_priv *hw_priv, struct nfp_net_hw *hw, diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index a257366656..7b919a939b 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -115,6 +115,12 @@ bool nfp_flower_pf_dispatch_pkts(struct nfp_net_rxq *rxq, uint32_t port_id); uint16_t nfp_flower_pf_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); +uint16_t nfp_flower_multiple_pf_xmit_pkts(void *tx_queue, + struct rte_mbuf **tx_pkts, + uint16_t nb_pkts); +uint16_t nfp_flower_multiple_pf_recv_pkts(void *rx_queue, + struct rte_mbuf **tx_pkts, + uint16_t nb_pkts); int nfp_flower_pf_start(struct rte_eth_dev *dev); int nfp_flower_pf_stop(struct rte_eth_dev *dev); uint32_t nfp_flower_pkt_add_metadata(struct nfp_app_fw_flower *app_fw_flower, diff --git a/drivers/net/nfp/flower/nfp_flower_cmsg.h b/drivers/net/nfp/flower/nfp_flower_cmsg.h index eda047a404..a7866e8382 100644 --- a/drivers/net/nfp/flower/nfp_flower_cmsg.h +++ b/drivers/net/nfp/flower/nfp_flower_cmsg.h @@ -1045,4 +1045,11 @@ int nfp_flower_cmsg_qos_delete(struct nfp_app_fw_flower *app_fw_flower, int nfp_flower_cmsg_qos_stats(struct nfp_app_fw_flower *app_fw_flower, struct nfp_cfg_head *head); +static inline bool +nfp_flower_port_is_phy_port(uint32_t port_id) +{ + return (NFP_FLOWER_CMSG_PORT_TYPE(port_id) == + NFP_FLOWER_CMSG_PORT_TYPE_PHYS_PORT); +} + #endif /* __NFP_CMSG_H__ */ diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 6e957b125f..1f1b462b41 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -815,8 +815,8 @@ nfp_flower_multiple_pf_repr_init(struct rte_eth_dev *eth_dev, hw_priv = repr_init->hw_priv; eth_dev->dev_ops = &nfp_flower_multiple_pf_repr_dev_ops; - eth_dev->rx_pkt_burst = nfp_net_recv_pkts; - eth_dev->tx_pkt_burst = nfp_flower_pf_xmit_pkts; + eth_dev->rx_pkt_burst = nfp_flower_multiple_pf_recv_pkts; + eth_dev->tx_pkt_burst = nfp_flower_multiple_pf_xmit_pkts; eth_dev->data->dev_flags |= RTE_ETH_DEV_REPRESENTOR | RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index c261e575bc..b41dbee4ff 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -2530,6 +2530,12 @@ nfp_pf_init(struct rte_pci_device *pci_dev) hw_priv->is_pf = true; + if (!nfp_net_recv_pkt_meta_check_register(hw_priv)) { + PMD_INIT_LOG(ERR, "PF register meta check function failed."); + ret = -EIO; + goto hw_priv_free; + } + /* * PF initialization has been done at this point. Call app specific * init code now. diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c index 4941c915e7..36b98dc0c2 100644 --- a/drivers/net/nfp/nfp_ethdev_vf.c +++ b/drivers/net/nfp/nfp_ethdev_vf.c @@ -316,6 +316,12 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev) hw_priv->dev_info = dev_info; hw_priv->pf_dev = pf_dev; + if (!nfp_net_recv_pkt_meta_check_register(hw_priv)) { + PMD_INIT_LOG(ERR, "VF register meta check function failed."); + err = -EINVAL; + goto hw_priv_free; + } + eth_dev->process_private = hw_priv; /* For secondary processes, the primary has done all the work */ diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index ccfb4b39f1..4ad6c532ee 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -9,6 +9,7 @@ #include +#include "flower/nfp_flower_cmsg.h" #include "flower/nfp_flower_representor.h" #include "nfd3/nfp_nfd3.h" #include "nfdk/nfp_nfdk.h" @@ -2877,3 +2878,50 @@ nfp_net_vf_config_app_init(struct nfp_net_hw *net_hw, return 0; } + +static inline bool +nfp_net_meta_has_no_port_type(__rte_unused struct nfp_net_meta_parsed *meta) +{ + return true; +} + +static inline bool +nfp_net_meta_is_not_pf_port(__rte_unused struct nfp_net_meta_parsed *meta) +{ + return false; +} + +static inline bool +nfp_net_meta_is_pf_port(struct nfp_net_meta_parsed *meta) +{ + return nfp_flower_port_is_phy_port(meta->port_id); +} + +bool +nfp_net_recv_pkt_meta_check_register(struct nfp_net_hw_priv *hw_priv) +{ + struct nfp_pf_dev *pf_dev; + + pf_dev = hw_priv->pf_dev; + if (!hw_priv->is_pf) { + pf_dev->recv_pkt_meta_check_t = nfp_net_meta_has_no_port_type; + return true; + } + + switch (pf_dev->app_fw_id) { + case NFP_APP_FW_CORE_NIC: + pf_dev->recv_pkt_meta_check_t = nfp_net_meta_has_no_port_type; + break; + case NFP_APP_FW_FLOWER_NIC: + if (pf_dev->multi_pf.enabled) + pf_dev->recv_pkt_meta_check_t = nfp_net_meta_is_pf_port; + else + pf_dev->recv_pkt_meta_check_t = nfp_net_meta_is_not_pf_port; + break; + default: + PMD_INIT_LOG(ERR, "Unsupported Firmware loaded."); + return false; + } + + return true; +} diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 64b8a38918..a9581827f9 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -169,6 +169,9 @@ struct nfp_pf_dev { /** Record the speed uptade */ bool speed_updated; + + /** Function pointer used to check the metadata of recv pkts. */ + bool (*recv_pkt_meta_check_t)(struct nfp_net_meta_parsed *meta); }; #define NFP_NET_ETH_FLOW_LIMIT 8 @@ -389,6 +392,7 @@ bool nfp_net_version_check(struct nfp_hw *hw, void nfp_net_ctrl_bar_size_set(struct nfp_pf_dev *pf_dev); void nfp_net_notify_port_speed(struct nfp_net_hw *hw, struct rte_eth_link *link); +bool nfp_net_recv_pkt_meta_check_register(struct nfp_net_hw_priv *hw_priv); #define NFP_PRIV_TO_APP_FW_NIC(app_fw_priv)\ ((struct nfp_app_fw_nic *)app_fw_priv) diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index c7812a6dee..35fb637b21 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -416,6 +416,7 @@ nfp_net_recv_pkts(void *rx_queue, struct nfp_net_hw *hw; struct rte_mbuf *new_mb; struct nfp_net_rxq *rxq; + struct nfp_pf_dev *pf_dev; struct nfp_net_dp_buf *rxb; struct nfp_net_rx_desc *rxds; uint16_t avail_multiplexed = 0; @@ -431,6 +432,7 @@ nfp_net_recv_pkts(void *rx_queue, } hw = rxq->hw; + pf_dev = rxq->hw_priv->pf_dev; while (avail + avail_multiplexed < nb_pkts) { rxb = &rxq->rxbufs[rxq->rd_p]; @@ -519,13 +521,15 @@ nfp_net_recv_pkts(void *rx_queue, if (unlikely(rxq->rd_p == rxq->rx_count)) /* Wrapping */ rxq->rd_p = 0; - if (((meta.flags >> NFP_NET_META_PORTID) & 0x1) == 0) { + if (pf_dev->recv_pkt_meta_check_t(&meta)) { rx_pkts[avail++] = mb; - } else if (nfp_flower_pf_dispatch_pkts(rxq, mb, meta.port_id)) { - avail_multiplexed++; } else { - rte_pktmbuf_free(mb); - break; + if (nfp_flower_pf_dispatch_pkts(rxq, mb, meta.port_id)) { + avail_multiplexed++; + } else { + rte_pktmbuf_free(mb); + break; + } } } -- 2.39.1