From patchwork Wed Jun 7 01:57:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 128243 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 1764842C45; Wed, 7 Jun 2023 03:58:51 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9EEF842D64; Wed, 7 Jun 2023 03:58:10 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2090.outbound.protection.outlook.com [40.107.220.90]) by mails.dpdk.org (Postfix) with ESMTP id 8BC8D42D61 for ; Wed, 7 Jun 2023 03:58:09 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lm10Uvn+J2YqLHNGFDUGyKVa7lJGANfruzqZKekuvO1iA2ENDQfX4hE0N+x76TZUVBKS8y4R61OoeEBUVIlQZ6Wp/zaq3Cn5Df8JzcjGDI9jL65kD+9JihZOF18Y6PqQsyQfDQ4EOYCsv2ZVuVNboHme6OagY3efB/0ImZylvfXUeY5ZZw+Ct8WMsPcG5DZoVk7dW1yiEvTk35RjrK+AKR2N2Mn+1rGMT6sjE1CvKLc1s2dka8U2x/igsWBdfedl8PLYCDiA3+9rtzb3pejewinwTx89tIkQ287JEivXYoDypci1RxNh52mhJNDo2QoQt+PpmtBWHZ4cUTy+0dkBuQ== 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=ywlwfF3mMuLKz2U0RLDU0OB6tukCp8M10f86ViOvpYc=; b=biryt9XR892lVB+PIjmfLW78yKb2mPuPvlEhrNuvrCAJk9T5S601/zlZ+XFXkCqDBN9OpDaFMsFtb8jb/f/g+QO41DwFMep/tBObj3P70AyBHnV5ckl4474hgs2H9sZHJZhIhn8btVSPR17Vz6q9wzpOShj30zObAX6/oywB7BuhSr9Co7E7FMrse813pmxCU+JaB8kHoCWy6WYvWUauD4yvoKEfry5vOh7w+whVqVzrExHlLi+w76cvvqfEqXBRuN5UCCDatGT//tGaIjq0PJBapG3kIzrcRe//cCadSq3TGw1bMG/UaIO3sWPDRLosMz4yOufB5KxrDoBxtfPIag== 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=ywlwfF3mMuLKz2U0RLDU0OB6tukCp8M10f86ViOvpYc=; b=jIuMPHUjJ+m1gSgWidgDrZLB1F7G1We1ro6rlKPNU/OsG42h2cdu13yUzNCV7U5rTYz1QRaXw7+PRUMUi1NcmS0717tfNAoUkJ2fTOduVAUxANZI5D0pXWMznySKCt67llB/wtXZqIj0pvSeEcfdAqiAGOiPELm1/Uz1bzIPXYs= 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 PH7PR13MB5453.namprd13.prod.outlook.com (2603:10b6:510:138::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.33; Wed, 7 Jun 2023 01:58:08 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::d2cb:a650:e1ce:2174]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::d2cb:a650:e1ce:2174%3]) with mapi id 15.20.6455.030; Wed, 7 Jun 2023 01:58:08 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 08/10] net/nfp: merge the xmit function of NFD3 Date: Wed, 7 Jun 2023 09:57:07 +0800 Message-Id: <20230607015709.336420-9-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230607015709.336420-1-chaoyong.he@corigine.com> References: <20230607015709.336420-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SG2PR02CA0131.apcprd02.prod.outlook.com (2603:1096:4:188::6) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5453:EE_ X-MS-Office365-Filtering-Correlation-Id: ff2ee9fe-14af-4c0e-88c9-08db66faa3b8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Su4DtlSalWHRWazp6vvff+qZV4DBUb0EHipOIhmVgvK5BTYUQrIZROva9gxL1fOdKVwT1zDJnhwIrmmgQ4FjCL0oPpY3eyk8ZgngtwULxWgYU8oujmawop0h3gati00/nfY7qktxsoM87OslgYl/dApC/efNIs17VAFFEBM8qChfY225ZGYoDXLp3frZHFJTr/+OGlNgcFnqS1a9vg0PYhHEfYZEqwgFUEbOut/ZJK35cfXKHD5xi/1Nb2IpEeQZe2H9SZhLnNCQdlHKOiInEcOfmsaf/X7ADYDNi6958UevRREcxgkxKvElrPV16F3VVjCwnhoTQlx/Z/tC9HgJfD96XvehxOkPWjkhf1YqG6VJnlBqofnmPL+onuygEu8WQ1httLT55cZHf8LWbDVJPWSHK2MNH2jZ7g6CFMxsyWR3aF/blqLE2ctD5TC5wnOtDS+stYxnJbpA060Ui9ev7PmluW+uQ/04+rlJLywO2NPYTCu6gd+1XAQarPcXbu/cyKtkwHvuwQJl2mUFKWk79Pm68nVgAOBpYzQHP00kS4QZpPwe1ht2zZASYlWxw8ZfkaVNIizVSN+NfnuWUfvoB/ZbWzMAPPZcn7Sd7iSt4ACACvEPr/j0rUcFxEmF4a8S 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:(13230028)(4636009)(346002)(396003)(376002)(136003)(366004)(39840400004)(451199021)(107886003)(1076003)(6506007)(26005)(6512007)(36756003)(83380400001)(38350700002)(86362001)(38100700002)(186003)(2616005)(8676002)(4326008)(41300700001)(44832011)(6916009)(478600001)(66946007)(66476007)(2906002)(316002)(8936002)(5660300002)(6486002)(52116002)(66556008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ogZkznVacaCVbpyne5vGwS+i7tar?= =?utf-8?q?g5B8ZSeZdnnxtwdJTr+gz9VPqv5196EIXbRhX2auhYoooI4IPUf4YMxeHF4soOh6o?= =?utf-8?q?IMprmYbGFg/b2IoIRnktBRe05v41f1Xu/cbHk7kaHCqxpumtbeHMCuo1yLBdmBhsa?= =?utf-8?q?nGYb17FvpNxrP4E6lk3jW+YSpK61p7bZ+ESWewu0j89qdZ86R6J60boJZ7VB6WyIZ?= =?utf-8?q?Y+D+a+oBsVemtvebDt1HNsoRb2kIJD5fyl+fnJYxxHH4OV6AvmEnt+B6YGG63Q0w3?= =?utf-8?q?mSC6HCClVe0j/o8BFIoO7w2P3PTtsjH6tVIoYRVYXFJ9k/w+sAbpGrB6Sw4AnfJAo?= =?utf-8?q?UL0vp4i+JdKEOz7alRVL3uCQQxmJRmLqsmxzoSgbRsO8XuyIBZg5kYcvvn1VHfa2B?= =?utf-8?q?I+nMPm6ZTvDtRqljpuhdhJMbBqgS8z5Wh5hlLgWsBsk387Zi3Gm+HnQgVn/MdReob?= =?utf-8?q?0Od6/VZ0GqnoMb+QWjcSgRBXdOL+WZtUko0dyywJQhP2sNgUhCRlu+eeCg2JK/dAH?= =?utf-8?q?thZkxx0AVW9BrCM9Zd58vtbi0mb66j+iFaU0clnwgD6cDyYKTl1y8XDwJL8x11337?= =?utf-8?q?jzX7WJskFUmZvViMMqUbEkixJXJtCulBgic/555bEa/zmWdCXvEeHJSbx4FUMFArS?= =?utf-8?q?fhn1xuDS5qNIoU9H55Yo/y0ub6rOMolZpSNWWRzOsJhmRg8SeY7vRy3QlNbGVqCaP?= =?utf-8?q?UYtYHKG/oqvLW2LkYWBKMJRFzbnhZuDgPBrf9MWjj2fqbu4JYft2WxsLJWR2BRUwd?= =?utf-8?q?QqteEW0wXRb5E2NF5ubVgMzoz2i33TVZc3Hx0Dh9a1UIMNK6LgjHwZ8c21ycsgyAY?= =?utf-8?q?IOWs6/75mD1nT/IRmpVNWhcv4frgMsJtGtco7FZ67v5CtyW1go7S6nZTtWWSiZ+VY?= =?utf-8?q?DYCi2uDbIsk2MwNiUWTlM7VTEb72vO6GGO6Vq9SeoqGX/jN0+3y4sqntPkC2s3ZMB?= =?utf-8?q?Jk7p9Dp2mDV4vkDqGbiY57vkJL9OMU0GjnkYeB8na9sXXffGHhzJne6KCOTJxkTa7?= =?utf-8?q?ABnVb0qsLy7Kbuc/0+scu9ioxVaWd6kDRTdb8mQ6c6QdB8YoiAir9sAw5ROseFFsE?= =?utf-8?q?LIOnL4wHC0xJeN94sYzI5/gae9I9IyBJOfFQe2LInmzGcptabpcooPlFJnYAVt0lL?= =?utf-8?q?gVSuhAsNNSHmeRVsDld2gc9GNaSriq628seuRJ2kFgtKLrzEnLWpHUjGAXExg00zS?= =?utf-8?q?5YwnYLvhPgK4JLiRZ1lrxRGvm/9EtjGWAchfK9LwRxiKsAIFUyY7EAfGLpOc1b/3R?= =?utf-8?q?V31A9uZTCm3fMZxVEs6e7bWddME6x6YiGRSFswiujCncL50K/8SY1qvT8zrv50gRF?= =?utf-8?q?eAbdrE3Q3TqfEKZ+VJ2uE+7crDn7Ds/EuTEaw9Ak/LK/LMjOKDwPjBlEy26Te7JwY?= =?utf-8?q?cHpwQbnx4lqmfefz89fisAcduexhXrzMYqW3zMUEZpQOTuBoYEhG5rWgiSXrJvByu?= =?utf-8?q?nCtT/mkfCjZx8130ZoYL+pU8i/ROjQgGb7l3aSAe4Ep0qu3VICIU1QO337SzegY7q?= =?utf-8?q?BOScftjHcZwP2ve7W9Do1e8+7e+gxPjB1g=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff2ee9fe-14af-4c0e-88c9-08db66faa3b8 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jun 2023 01:58:07.9663 (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: CygnORoXag72rX2bmfnSo2AnGr1MqX61BpTKZqKkHW04L6J6+YLiersji8YSUtnArz2l5PFr/Jw2b3jwpZKGU8L2RleH1+LLZlKCZKCwdvA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5453 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 only different logic between the NFD3 xmit function of PF representor port and PF is if the logic about metadata exists. So squash the NFD3 xmit function and use a parameter to distinguish them. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower.c | 124 +--------------------------- drivers/net/nfp/nfd3/nfp_nfd3.h | 4 + drivers/net/nfp/nfd3/nfp_nfd3_dp.c | 23 +++++- 3 files changed, 24 insertions(+), 127 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 748b45b9ad..3bc863b9f1 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -490,129 +490,7 @@ nfp_flower_pf_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { - int i; - int pkt_size; - int dma_size; - uint64_t dma_addr; - uint16_t free_descs; - uint16_t issued_descs; - struct rte_mbuf *pkt; - struct nfp_net_hw *hw; - struct rte_mbuf **lmbuf; - struct nfp_net_txq *txq; - struct nfp_net_nfd3_tx_desc txd; - struct nfp_net_nfd3_tx_desc *txds; - - txq = tx_queue; - hw = txq->hw; - txds = &txq->txds[txq->wr_p]; - - PMD_TX_LOG(DEBUG, "working for queue %hu at pos %u and %hu packets", - txq->qidx, txq->wr_p, nb_pkts); - - if ((nfp_net_nfd3_free_tx_desc(txq) < nb_pkts) || (nfp_net_nfd3_txq_full(txq))) - nfp_net_tx_free_bufs(txq); - - free_descs = (uint16_t)nfp_net_nfd3_free_tx_desc(txq); - if (unlikely(free_descs == 0)) - return 0; - - pkt = *tx_pkts; - issued_descs = 0; - - /* Sending packets */ - for (i = 0; i < nb_pkts && free_descs > 0; i++) { - /* Grabbing the mbuf linked to the current descriptor */ - lmbuf = &txq->txbufs[txq->wr_p].mbuf; - /* Warming the cache for releasing the mbuf later on */ - RTE_MBUF_PREFETCH_TO_FREE(*lmbuf); - - pkt = *(tx_pkts + i); - - if (unlikely(pkt->nb_segs > 1 && - !(hw->cap & NFP_NET_CFG_CTRL_GATHER))) { - PMD_INIT_LOG(ERR, "Multisegment packet not supported"); - goto xmit_end; - } - - /* Checking if we have enough descriptors */ - if (unlikely(pkt->nb_segs > free_descs)) - goto xmit_end; - - /* - * Checksum and VLAN flags just in the first descriptor for a - * multisegment packet, but TSO info needs to be in all of them. - */ - txd.data_len = pkt->pkt_len; - nfp_net_nfd3_tx_tso(txq, &txd, pkt); - nfp_net_nfd3_tx_cksum(txq, &txd, pkt); - - if ((pkt->ol_flags & RTE_MBUF_F_TX_VLAN) && - (hw->cap & NFP_NET_CFG_CTRL_TXVLAN)) { - txd.flags |= NFD3_DESC_TX_VLAN; - txd.vlan = pkt->vlan_tci; - } - - /* - * mbuf data_len is the data in one segment and pkt_len data - * in the whole packet. When the packet is just one segment, - * then data_len = pkt_len - */ - pkt_size = pkt->pkt_len; - - while (pkt != NULL && free_descs > 0) { - /* Copying TSO, VLAN and cksum info */ - *txds = txd; - - /* Releasing mbuf used by this descriptor previously*/ - if (*lmbuf != NULL) - rte_pktmbuf_free_seg(*lmbuf); - - /* - * Linking mbuf with descriptor for being released - * next time descriptor is used - */ - *lmbuf = pkt; - - dma_size = pkt->data_len; - dma_addr = rte_mbuf_data_iova(pkt); - - /* Filling descriptors fields */ - txds->dma_len = dma_size; - txds->data_len = txd.data_len; - txds->dma_addr_hi = (dma_addr >> 32) & 0xff; - txds->dma_addr_lo = (dma_addr & 0xffffffff); - free_descs--; - - txq->wr_p++; - if (unlikely(txq->wr_p == txq->tx_count)) /* wrapping?*/ - txq->wr_p = 0; - - pkt_size -= dma_size; - - /* - * Making the EOP, packets with just one segment - * the priority - */ - if (likely(pkt_size == 0)) - txds->offset_eop = NFD3_DESC_TX_EOP | FLOWER_PKT_DATA_OFFSET; - else - txds->offset_eop = 0; - - pkt = pkt->next; - /* Referencing next free TX descriptor */ - txds = &txq->txds[txq->wr_p]; - lmbuf = &txq->txbufs[txq->wr_p].mbuf; - issued_descs++; - } - } - -xmit_end: - /* Increment write pointers. Force memory write before we let HW know */ - rte_wmb(); - nfp_qcp_ptr_add(txq->qcp_q, NFP_QCP_WRITE_PTR, issued_descs); - - return i; + return nfp_net_nfd3_xmit_pkts_common(tx_queue, tx_pkts, nb_pkts, true); } static void diff --git a/drivers/net/nfp/nfd3/nfp_nfd3.h b/drivers/net/nfp/nfd3/nfp_nfd3.h index 5bf89868fc..910e622fa2 100644 --- a/drivers/net/nfp/nfd3/nfp_nfd3.h +++ b/drivers/net/nfp/nfd3/nfp_nfd3.h @@ -155,6 +155,10 @@ nfp_net_nfd3_tx_cksum(struct nfp_net_txq *txq, uint32_t nfp_flower_nfd3_pkt_add_metadata(struct rte_mbuf *mbuf, uint32_t port_id); +uint16_t nfp_net_nfd3_xmit_pkts_common(void *tx_queue, + struct rte_mbuf **tx_pkts, + uint16_t nb_pkts, + bool repr_flag); uint16_t nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); diff --git a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c index 2ad098a699..ee39686329 100644 --- a/drivers/net/nfp/nfd3/nfp_nfd3_dp.c +++ b/drivers/net/nfp/nfd3/nfp_nfd3_dp.c @@ -109,10 +109,20 @@ uint16_t nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) +{ + return nfp_net_nfd3_xmit_pkts_common(tx_queue, tx_pkts, nb_pkts, false); +} + +uint16_t +nfp_net_nfd3_xmit_pkts_common(void *tx_queue, + struct rte_mbuf **tx_pkts, + uint16_t nb_pkts, + bool repr_flag) { int i; int pkt_size; int dma_size; + uint8_t offset; uint64_t dma_addr; uint16_t free_descs; uint16_t issued_descs; @@ -122,7 +132,6 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct nfp_net_txq *txq; struct nfp_net_nfd3_tx_desc txd; struct nfp_net_nfd3_tx_desc *txds; - struct nfp_net_meta_raw meta_data; txq = tx_queue; hw = txq->hw; @@ -146,7 +155,6 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, /* Sending packets */ for (i = 0; i < nb_pkts && free_descs > 0; i++) { - memset(&meta_data, 0, sizeof(meta_data)); /* Grabbing the mbuf linked to the current descriptor */ lmbuf = &txq->txbufs[txq->wr_p].mbuf; /* Warming the cache for releasing the mbuf later on */ @@ -154,7 +162,14 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, pkt = *(tx_pkts + i); - nfp_net_nfd3_set_meta_data(&meta_data, txq, pkt); + if (!repr_flag) { + struct nfp_net_meta_raw meta_data; + memset(&meta_data, 0, sizeof(meta_data)); + nfp_net_nfd3_set_meta_data(&meta_data, txq, pkt); + offset = meta_data.length; + } else { + offset = FLOWER_PKT_DATA_OFFSET; + } if (unlikely(pkt->nb_segs > 1 && (hw->cap & NFP_NET_CFG_CTRL_GATHER) == 0)) { @@ -222,7 +237,7 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, txds->offset_eop = 0; /* Set the meta_len */ - txds->offset_eop |= meta_data.length; + txds->offset_eop |= offset; pkt = pkt->next; /* Referencing next free TX descriptor */