From patchwork Tue Nov 29 01:21:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 120216 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 641FAA0093; Tue, 29 Nov 2022 02:21:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4EBAD4021E; Tue, 29 Nov 2022 02:21:44 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2122.outbound.protection.outlook.com [40.107.237.122]) by mails.dpdk.org (Postfix) with ESMTP id 8FC7C40042; Tue, 29 Nov 2022 02:21:42 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iExFSeNd6jk5EuuwIeIEO7QSvf/ltL5Gkq8NpRlHWvBlUGGrTl8seWC+C14G5zmoRPU8P5ZzcnNxaCy0CvDldRAGrWyw/HLtZr/+pOjyrYv/Bl28rRdEXSywWP6lXHGKt6AWxqyAO8+x+RBGYDMwSFJk0Oe/nyhITOM1umqK8hGKVJeVx13wciLN2z3sjdlv2CgXvsfPZEUkZ+gz0mau1xHWPNtpTrBP9n6J/yZC92pxQH3tLxCx+uPv5OW87rlDlYCBZx5CsfU4z7Zh9uyRzlqudAWPC61xm1PVz9CrGPBtkJcpqwNhsbqLY6Dc6IKhAKbUQHso6wLw+Wm1YTb/7w== 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=AY0gIvNSxVN3n7QzT6PTDtZ++r9TKSRGfVvcmcHBQpQ=; b=T0SWP56RKJyQ7PLdx/v6FUV1NcDtwdoeluAeBT/CQDUJo7VXplXWsDKsuyOujUjGNFfsnScawDzqnX/tVLhDyqCNPPl+7by481w8IYk/hmMXXw456SXg1AEVfxw5zqxo1q/NT4BGf/8zHYme0I+XcOPyHA3aNF9X9Kiq2RBTKjKtIIHfIiDMPiD8HlRsrZ1zuAwAT+2wnkeYTWkP7X2x0UtFWsSmi36la2pDEPC2yba+O+HzG3Hctju7z2aTmb/AntWBFQJ0gcVGr2vjwn2SMSSPtE9xtn17ltroTNxRPLritrtwWB5W7E6/UlHLwhQR3vCNoSjAFgJwbAMj14K+Gg== 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=AY0gIvNSxVN3n7QzT6PTDtZ++r9TKSRGfVvcmcHBQpQ=; b=oU58PVPxEyQeJio0pb3aZwPn/kMIaGne26t6LhE8deJOh36FsVUcVk2xaQjaAatkszE3vOHWBPCkde1wW8Mn7AWmYHxKcFY4hKPAUIt85hlZ5qjPORyR8PRIL6goAehURDIXGFQbLML8T/0+qCSTvVmuJFone6nleVLNZjQwS9g= 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 MW5PR13MB5512.namprd13.prod.outlook.com (2603:10b6:303:191::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.22; Tue, 29 Nov 2022 01:21:39 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::5122:8c31:51f3:4ee7]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::5122:8c31:51f3:4ee7%4]) with mapi id 15.20.5857.021; Tue, 29 Nov 2022 01:21:38 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Long Wu , jin.liu@corigine.com, stable@dpdk.org Subject: [PATCH v2] net/nfp: fix issue of data len exceeds descriptor limitation Date: Tue, 29 Nov 2022 09:21:22 +0800 Message-Id: <20221129012122.24394-1-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.29.3 In-Reply-To: <20221117083320.21815-1-chaoyong.he@corigine.com> References: <20221117083320.21815-1-chaoyong.he@corigine.com> X-ClientProxiedBy: SI2PR01CA0039.apcprd01.prod.exchangelabs.com (2603:1096:4:193::16) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|MW5PR13MB5512:EE_ X-MS-Office365-Filtering-Correlation-Id: 866270b4-b9c1-4d85-3f9b-08dad1a8103e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: pTcElDwfp8V6LxxzqwrRNWkrKN9B79+box2XWzExB+OtOyNdD2FcZEAz+ZEurm/oUes2BRT1NqMskZjZMqr/In1DC7IZNWP30rcq4bDveXAgr4QgJCOEq5eRnnFAGX29MfvN74fUj3Cun+06WLwq+qYDw2Z61MTDkgs+pCo0XAwEOmjE5DquxHp2WTjo0nIVajJgr2aITFnnt35LBVslQlltQ8jvaiEJBAW2FUHM4Em3yTBDSv0h9DhebWBdzVhNMA03NNLBja9hcCa/BLsD3xKjXh8t+BxtbSv1lCHYSH/DkHsBle0ceD1Fjf4ESyqqH2Gmg1DlQFvRNpM2ym/KHGxQFqrQjlUs5ceHNkmA1I7v7845nsIKiIucucnrWNBDD30/yooTgGli3ovAUYRZ9TmEGOdml8ZRBoMeuhNPnLQDxLbmg0rcb4cit5aDh4E9NfpnF8Vuth5UYSpZzCtqaKbkjlzEHWFipJSnYZF7Tle7Yx6U0tAGOFNXJ4opJ4yhp3fGmE02mY4wd+N5UBK5443x92ADq8L4Ucso2w9UytxKHfjTsazBAGbB26ukIebgqSuji/CHuW/2C2doCTDRfEbOk+1C2EZg0ZqwDVbSA0TxkfQ84U+Yk+XSkB28dQ1FFXQ3xckxIphy2nXFVS7jk4rwU0Z2VX1fVSvJOmugZMU0mhWbORf9O/3TTtJZ6awltyAKfeiurulNZnKo0o5zQN6KShhmq1U+PiQHBEmBfog= 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:(13230022)(4636009)(366004)(376002)(346002)(396003)(39840400004)(136003)(451199015)(36756003)(86362001)(8936002)(44832011)(5660300002)(8676002)(1076003)(2616005)(83380400001)(186003)(478600001)(6506007)(6486002)(66574015)(6512007)(26005)(4326008)(450100002)(6666004)(52116002)(66556008)(66476007)(38100700002)(66946007)(38350700002)(6916009)(41300700001)(316002)(2906002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?R3J9AtV5CWI/6lYKOcCjh+wxCmVZ?= =?utf-8?q?9qkobFLvmu+22XKj61Qs+e7lstgTuj7/VZTkJJsTxKNNuykeMk0AC6xLXd6oU1hGw?= =?utf-8?q?LlKiFtBSJS53KADzy4UBWfNt74hdDnL6CwHLzSHKmt4vVfxkq/xzUrm7PXF0tuWT5?= =?utf-8?q?v/zBKCC4KIrHkRvxEs6dUg21by3B+Ss5s+o9i9WK8HRHz93Ymoze1ebvoGwXWS+qF?= =?utf-8?q?XbaPtqfC6vNX+Fl/zKTOQnoXtysnk4gYx2uoJIvt/0WifK929+ciNiS83X6PLMvds?= =?utf-8?q?tqyIn5+QsfWY55c3evUBu0AXfMMUbxvl+52Iyd+vYl7uVkGFnF18HqobjO9/HzvTJ?= =?utf-8?q?5uctnjtxFp/RnW31tu63pI6fhFLr28zVqXreu4tPCYbnxM+xUxeHNtt8TA2SlTG9i?= =?utf-8?q?zDsIGQ+soDdV/uZkwanJuJt4b0GpsGjCFedm3+66KCrTI/y6jH4H/Domjw6B0NRAO?= =?utf-8?q?4ggqNywMc/HfzYELe3uiae+X1rwe2hb4L0LfHKz3sO8NEUqALfm4EUgNwPD9wBkX/?= =?utf-8?q?orxu9Z5/QHrA4fCd8TS5wtJkIWaLD1HpPCwnZeEivMs09D3m9PrNQYTKtLsGfzScl?= =?utf-8?q?J1D8Rk+VRA8Ou13bH9F1SEgfAyUAeWY4YBxh4QwdY29+LmqNVaHY8I+y42sNzon+q?= =?utf-8?q?T9CjuCWudmTztbnSuDuT+no7/oeozJINM7prhqWReU5vGzQE4mL9DkrV/TfeUZBin?= =?utf-8?q?EkA5OMiR7YDdPJpFCzUt7pRhALZjz4xoM042ypPvQlt2BvZgqztgkvEyIBcmi07qZ?= =?utf-8?q?nZeahWEMUmAFIAV6mIFsgHDOUJoqXAqMCT1xq8qddBSRuABHXz3UTiTxkNEJf7eKd?= =?utf-8?q?orPh5czi4Vw111kf4gkI3Bg2rXjT6qKqMz/jNMd92jqTpfHUvwpZRTVvVmCjYo0vY?= =?utf-8?q?84UjdNV26R33pwjcClAzQLDs5nxIQSbE+6H97lT5xkwqAggzWG7V++P41AKj2o6au?= =?utf-8?q?ZiWq5x3QMlrpugjt9wVZdoM1X5v3YMFOH3o0dFjCLT54goviTg7l3ENQn8rl3KL3v?= =?utf-8?q?+gbz+f5I+NVpthc+OywZ5Xc+3VW6RHGAbF+JAgd7UWYVBdeEG9jxg/M7h44820GQw?= =?utf-8?q?8dWpfseXtzUqoP/HqzRGr2PGovcfXev2JgJkmK87oUWFmix6klfjaAwVlEQg0ZRfV?= =?utf-8?q?aEmCq5XHohYywoIyU98XQlRdT+AUt3IBAeq0Mwzt/FEMmys50NhszKHO6aHNNRkmM?= =?utf-8?q?CTnDOMpTXLrUJ0GXKQY76dhE4ekC31FiHC3gMnqgSYpqsqtfSXiku9xmCawuwX3mp?= =?utf-8?q?SCnGltEYw1aFMydEGlP+2OHwdg1D5TiyI/PCCh2bcSWiu0VKjEkTnjXY2GrgebFU9?= =?utf-8?q?xkXR+rSXP54P8YHF/yZdDOQtdWsAaJ+Tyo6VxhxaSh58cPsa5y3w1dq8BHdmY7qj1?= =?utf-8?q?eCG1pv+DSxeC4DDRxgN4aaAcXupOkDTZFOR1krNQFIglVfWXR/ocUVhYa0ZLMrBaj?= =?utf-8?q?ew+Jj7Sl3/y6ex16unqgkMKU7VqB30lp9v3GYko4jUCbbBBPBDjw2Ke5YztEjZ7Dt?= =?utf-8?q?HQIc6vAhMMB/quyODj30HsA90pHTe3zRZg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 866270b4-b9c1-4d85-3f9b-08dad1a8103e X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Nov 2022 01:21:38.6384 (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: 09tbp3uGHeWp6FVPBXpxUoyoCw74JRsGU1zjplh/rLdz6759cJRxCIm4pzUB+YaicUwSG8Kn+dNWwzYQbFVpTSvnw8mnbfMzAXNpqY66sMs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR13MB5512 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: Long Wu If dma_len is larger than NFDK_DESC_TX_DMA_LEN_HEAD, the value of dma_len bitwise and NFDK_DESC_TX_DMA_LEN_HEAD maybe less than packet head length and the packet will be dropped. Fill maximum dma_len in first tx descriptor to make sure the whole head is included in the first descriptor. In addition, add comments to better explain the code flow. Fixes: c73dced48c8c ("net/nfp: add NFDk Tx") Cc: jin.liu@corigine.com Cc: stable@dpdk.org Signed-off-by: Long Wu Reviewed-by: Niklas Söderlund --- v2: * Rewrite the commit message. * Revise some logic according to the advice. --- drivers/net/nfp/nfp_rxtx.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c index 01cffdfde0..990007c03d 100644 --- a/drivers/net/nfp/nfp_rxtx.c +++ b/drivers/net/nfp/nfp_rxtx.c @@ -1063,6 +1063,7 @@ nfp_net_nfdk_tx_maybe_close_block(struct nfp_net_txq *txq, struct rte_mbuf *pkt) if (unlikely(n_descs > NFDK_TX_DESC_GATHER_MAX)) return -EINVAL; + /* Under count by 1 (don't count meta) for the round down to work out */ n_descs += !!(pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG); if (round_down(txq->wr_p, NFDK_TX_DESC_BLOCK_CNT) != @@ -1219,8 +1220,19 @@ nfp_net_nfdk_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk } else { type = NFDK_DESC_TX_TYPE_GATHER; } + + /* Implicitly truncates to chunk in below logic */ dma_len -= 1; - dlen_type = (NFDK_DESC_TX_DMA_LEN_HEAD & dma_len) | + + /* + * We will do our best to pass as much data as we can in descriptor + * and we need to make sure the first descriptor includes whole + * head since there is limitation in firmware side. Sometimes the + * value of dma_len bitwise & NFDK_DESC_TX_DMA_LEN_HEAD will less + * than packet head len. + */ + dlen_type = (dma_len > NFDK_DESC_TX_DMA_LEN_HEAD ? + NFDK_DESC_TX_DMA_LEN_HEAD : dma_len) | (NFDK_DESC_TX_TYPE_HEAD & (type << 12)); ktxds->dma_len_type = rte_cpu_to_le_16(dlen_type); dma_addr = rte_mbuf_data_iova(pkt); @@ -1230,10 +1242,18 @@ nfp_net_nfdk_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk ktxds->dma_addr_lo = rte_cpu_to_le_32(dma_addr & 0xffffffff); ktxds++; + /* + * Preserve the original dlen_type, this way below the EOP logic + * can use dlen_type. + */ tmp_dlen = dlen_type & NFDK_DESC_TX_DMA_LEN_HEAD; dma_len -= tmp_dlen; dma_addr += tmp_dlen + 1; + /* + * The rest of the data (if any) will be in larger dma descritors + * and is handled with the dma_len loop. + */ while (pkt) { if (*lmbuf) rte_pktmbuf_free_seg(*lmbuf);