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 1FCA743B74 for ; Thu, 7 Mar 2024 06:57:13 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0A4E442DEA; Thu, 7 Mar 2024 06:57:13 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2104.outbound.protection.outlook.com [40.107.244.104]) by mails.dpdk.org (Postfix) with ESMTP id 1F3B9402F2 for ; Thu, 7 Mar 2024 06:57:10 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Cz/bUmaYax+GTxjG/jy3t2jLgIHvM72BndgNPMw7AX9G1SAT74+aoZ/0UhNKSHyZPrwt/9xpZOBl1Nz1eSd5+FXDVfWZBucWCKXzYV5EprEs6l4pslXpKTdL8Y5hGKdAjTe2PtCp2IJzz1SloZmvrvgqcWN4VvtL+YSRk06X/JWE4ojxGhtfwEugQRMgKKbVnwb1PBD3yWf6tw0l4YBElyahjqgQqjT2TIHJ8p9efKXrL96QeDKO+Yu/949T+PYxCcDK7Q+XuVZiXG7IU9RMBrnOlFCf//HgUcNnoPqQX5wqjDeFD2XW3ZTleKJS7yFTz6Sps/8qaoDQRbFXTAo3GA== 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=lNbvhoae4m2kzmlx7gbPUsCOzVeciKfm8gWWB4xbmmE=; b=Zwz76MrCwkoSFoA2ZnuH97btv/+fhnnAurlAFZkCSHHb8FFwIRoewdUOGj8rli8nTwB8DH80tCKAL1OxF5SZ8hHhye/NYBO91khFzAeOdyASSn38s/JHD8qtVaz63okWQrY6hkh/IcRvhTZMrdJ5WaOQ2HkHkf/1unlMs5GMH832KCDw7SVV/m3374+oWQLr+1YcC40cvq1ZrFg/auN3OHdtrBMME3moKf8i8qLLn6gaYZH0VmFWBPn9bakNYYiw5t+kq/5bD4jZh/xG3d3YYlxMAP5EM9ikD/IOXvR0NnYB6N/I5tsHxlmoaj0vzBaPk0tp9pb7jlQA7sh7aBBtMw== 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=lNbvhoae4m2kzmlx7gbPUsCOzVeciKfm8gWWB4xbmmE=; b=OsejD/S0wItWLQKiGifFUoMVygjFSKPdBona8D8yKwZi+r20dem2e+7qbxIucaqY872fuAdIYh4NQTrN88K2bcum9zIxHteoy46BPQp/vDnw5YuVRN+Ags/XqJr3SW+wsc+M0dKRt1V7Ik2kjMZ6Pf21qpjvLUGvAE0hlxVZ/NA= 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 BN0PR13MB4648.namprd13.prod.outlook.com (2603:10b6:408:116::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.26; Thu, 7 Mar 2024 05:57:08 +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.7339.035; Thu, 7 Mar 2024 05:57:08 +0000 From: Chaoyong He To: stable@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He Subject: [PATCH 22.11 4/7] net/nfp: fix resource leak for exit of flower firmware Date: Thu, 7 Mar 2024 13:56:36 +0800 Message-Id: <20240307055639.1626192-5-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240307055639.1626192-1-chaoyong.he@corigine.com> References: <20240307055639.1626192-1-chaoyong.he@corigine.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SJ0PR05CA0097.namprd05.prod.outlook.com (2603:10b6:a03:334::12) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|BN0PR13MB4648:EE_ X-MS-Office365-Filtering-Correlation-Id: 02a8d700-d880-424e-c94b-08dc3e6b6c48 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dZyMWc8xVgFo82p58OR0hDKXYWX8edfVmtTYjAS4QF7xXFLqv4lO8jxZsyyIUGMfXq8NrjHU+zyqglS6+mwW8qDA/ugy6wWdvTogRx4WvVbanigUIgR/QbYZZPJ31bZ1u/X1ALrYIv1WXQSAq8DZ5vO7c+pPpCZfbbcNq5yk7WNQiUG86U/DGW9LV9lpAWK5eqe4efRbxZ/Al5G9VtADFDsecB6d+mNxX4yiZun9u1AdndN1nUlponDJRSShWZRaQGy/Ij9pO6mtbp1Bobez2LGM/IAZhlf93zsuKmSg5Ot97uF6S0Y07mzUSFDVHelB1sROPCoaQEbVhdJIczbPxyWeCCYKFXCGOwmAMXEXZPdwsH9WjLqV+LBRO3b1LMZwEnkdO2a9n1UuPHwAF2Cb6mbKhfK5qli6xFbwBW6S/rtsBR3iD+7n3wSeErcXGoPpEEAXAreZQKOEgWJII1vMpTA5bMkH1GlT6tLTSXMTbqKAoKCcCSrI7l0S+mns0PONP1VtiB26iBr/v83IPetaeiQSEArDR4/8/h7tGBV/QIBRJGLEDIC6gxPCaLkHSU2tzc4Tkn349RtCevsBJb6Bp+kpt+6AtenTbrFkjB70Iy2NqTq9lHunw9zrwOC/+7TU8m4cr9v7u9zYeZhW99tZ4CJEaRg0Bv9bOkW5rAWvG4+AuJ3N+gt7dwmkjDValR3QOHpRtokBG5dsseZwoKlo0ekKpoF42LPYBbZdnx/Y5QE= 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)(376005)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?KCYPx2XuCotdow+40zYDsxMEXeFi1AF/FGj+zfkufp7odhszgeZUk3VGyxiz?= =?us-ascii?Q?17h4g9BVl9crHEMSfUabPNCDdXcpTxkrAdx0RK+Zy0dO9TtwHggFtrMUIAiO?= =?us-ascii?Q?+9w8CU8KgzKxa5LMpjiJUDUk3mo4DFXe9H5+Eb9gOhwcnWhALPPRGWDxZN69?= =?us-ascii?Q?Ys+FMbQdE3ryhVQENk+ESnDDITMjfHYm4y9cZjeCOHdBPnOb3JLbvFyrhPzZ?= =?us-ascii?Q?rYfdPA1aPhLnQzXDY+THODF0wmhC+oAiSOUKptKB6ZYAzOkSElMooFou2aIa?= =?us-ascii?Q?3SkwYLIoj+uUZtT5Rnwhw56g9aJTNVHc3hFTbGkJ/Z8DiDD4P0hb9CFHCM3u?= =?us-ascii?Q?grGejaRIEBbt6NXeBmcWUxZ9Q5k++e82pngq+9Ox0IMDIWWjQR9ti/xqZadH?= =?us-ascii?Q?Gt2qjDFkrU/Q/twOkCWQBcUwet7QoE8gKlg/Cdbe1rNUOaGy4k2TZk4ZeA9Z?= =?us-ascii?Q?1PBCeJ/YJXzyH0888K6bqow+WCO0Q+YJ1OpAR+vZclGlkQ1Cjzxz94hbPaf/?= =?us-ascii?Q?FwQSh2EwJELPmz93g0ZHrtsMpmP203fUnHZug7o5bH15f7bjCI7YeBRwaphz?= =?us-ascii?Q?lUD09KubXDeWa+RmOYH8ks8pFAS4pepgNmH2eqlw3DeYenA7Y7piZUiSWvz0?= =?us-ascii?Q?7IkohG5VfDvQH43von+8ZYVFQTswaPkvn6l2LrzuqhX74aj40QNxTOcU27jr?= =?us-ascii?Q?D6r6tFk2OgqQGbuQFDtOojeR82eU1RxgmCW5hm/9QwnIudWgXl5vrxjCCEeg?= =?us-ascii?Q?gNGVSszlOR5zg5HU2eWVigWwH+DGelPX9p/FBeuJZLVGFkdyE0OGwPO0upiS?= =?us-ascii?Q?7Rr1Mj+I1M0AWSWHupp1XD6sbqk5YeaU1jKwNAYzuf3rx2/0o8gm5zppAubo?= =?us-ascii?Q?wcRwLcnYPUs1smMqqRxkNyeXPuDa4uqz03dWtJ54aWGtnP3Sq5vHqb/M++X0?= =?us-ascii?Q?w8HwlbncD+dAf29NnoNCZsHgbMhqi1+WEhSYWCzuHsM6wZ6MAfw8FL0XzDev?= =?us-ascii?Q?0oZk1i+W8CbCXmENyrpt/1I7Pyf/qwehisI+QZg3WnB6gw3M82MIW/acROzO?= =?us-ascii?Q?A8u58gmHyMdwn/7w+olqw+3gRwALE+MIFTwcGqDbgR7fzGR+G0RKUGhujfWl?= =?us-ascii?Q?FlpyslRtkvbZSSTmKSszoe90/D9povINHPh64HHupjbrlRgKH+GJIkNj9UmW?= =?us-ascii?Q?J9aQDk+aRvxIB81w55FB3VpUKGU6n3llrg5Ju3hh122mcoYPS3+NuYAnkAi9?= =?us-ascii?Q?VdtsNcl/C0s1QbJbte7+uXzMvSpA/TlKypLpoZpDHWP45Rr9zoHW/y8HCG7q?= =?us-ascii?Q?rOpCS0vPGtfmOaWNUNte2UBUhS3I7wTQ52XeEkGyR4/96RdkiZxOjODysOhN?= =?us-ascii?Q?f3CIMBmh7gVQ9j2SzZ1wBGm0MIaZzRTs7ROzAiw8ZfUKGrCUhGVI3sb7jO6F?= =?us-ascii?Q?hQms7b5qmQSAkkCyyn2fyDI71snfQr8mCU5yxbFn5aUKYL5OZJAA+vZchMz4?= =?us-ascii?Q?bfU4zsjaSy3n6tC1lMv4BEHOeHyIJbKCcX7SmyOCW1/9Mht1wWG+YlHZppW+?= =?us-ascii?Q?25rWRTOcBNO3aeHCFgH2Ap2xfTBEKsGM6GR1iNv+vZ9ww1GD7c+tPFaSMRMk?= =?us-ascii?Q?Rg=3D=3D?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02a8d700-d880-424e-c94b-08dc3e6b6c48 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Mar 2024 05:57:08.1864 (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: sYXkV0M9aYW1BhOPQI5hIAyQY354nsBCPjz8bOTbRdKnTE0sGrwKHU+yWqsr/xi1mXsu85aTGhaH0zuzgX9lCrFzVUnVSF25/gp71rK0dq4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN0PR13MB4648 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org [ upstream commit a256a1227dbe0eac576a42b6c336ce55b7713109 ] Fix the resource leak problem in the exit logic of flower firmware. Fixes: e1124c4f8a45 ("net/nfp: add flower representor framework") Signed-off-by: Chaoyong He --- drivers/net/nfp/flower/nfp_flower.c | 70 ++++--------------- drivers/net/nfp/flower/nfp_flower.h | 1 + .../net/nfp/flower/nfp_flower_representor.c | 64 +++++++++++++++++ 3 files changed, 79 insertions(+), 56 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index 5896d20..28be1b9 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -182,61 +182,6 @@ nfp_flower_pf_stop(struct rte_eth_dev *dev) return 0; } -/* Reset and stop device. The device can not be restarted. */ -static int -nfp_flower_pf_close(struct rte_eth_dev *dev) -{ - uint16_t i; - struct nfp_net_hw *hw; - struct nfp_pf_dev *pf_dev; - struct nfp_net_txq *this_tx_q; - struct nfp_net_rxq *this_rx_q; - struct nfp_flower_representor *repr; - struct nfp_app_fw_flower *app_fw_flower; - - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return 0; - - repr = (struct nfp_flower_representor *)dev->data->dev_private; - hw = repr->app_fw_flower->pf_hw; - pf_dev = hw->pf_dev; - app_fw_flower = NFP_PRIV_TO_APP_FW_FLOWER(pf_dev->app_fw_priv); - - /* - * We assume that the DPDK application is stopping all the - * threads/queues before calling the device close function. - */ - nfp_pf_repr_disable_queues(dev); - - /* Clear queues */ - for (i = 0; i < dev->data->nb_tx_queues; i++) { - this_tx_q = (struct nfp_net_txq *)dev->data->tx_queues[i]; - nfp_net_reset_tx_queue(this_tx_q); - } - - for (i = 0; i < dev->data->nb_rx_queues; i++) { - this_rx_q = (struct nfp_net_rxq *)dev->data->rx_queues[i]; - nfp_net_reset_rx_queue(this_rx_q); - } - - /* Cancel possible impending LSC work here before releasing the port*/ - rte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, (void *)dev); - - nn_cfg_writeb(hw, NFP_NET_CFG_LSC, 0xff); - - /* Now it is safe to free all PF resources */ - PMD_DRV_LOG(INFO, "Freeing PF resources"); - nfp_cpp_area_free(pf_dev->ctrl_area); - nfp_cpp_area_free(pf_dev->hwqueues_area); - free(pf_dev->hwinfo); - free(pf_dev->sym_tbl); - nfp_cpp_free(pf_dev->cpp); - rte_free(app_fw_flower); - rte_free(pf_dev); - - return 0; -} - static const struct eth_dev_ops nfp_flower_pf_vnic_ops = { .dev_infos_get = nfp_net_infos_get, .link_update = nfp_net_link_update, @@ -244,7 +189,6 @@ static const struct eth_dev_ops nfp_flower_pf_vnic_ops = { .dev_start = nfp_flower_pf_start, .dev_stop = nfp_flower_pf_stop, - .dev_close = nfp_flower_pf_close, }; static inline void @@ -1221,6 +1165,20 @@ nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev) return ret; } +void +nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev) +{ + struct nfp_app_fw_flower *app_fw_flower; + + app_fw_flower = pf_dev->app_fw_priv; + nfp_flower_cleanup_ctrl_vnic(app_fw_flower->ctrl_hw); + 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); + nfp_flow_priv_uninit(pf_dev); + rte_free(app_fw_flower); +} + int nfp_secondary_init_app_fw_flower(struct nfp_cpp *cpp) { diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index c05a761..d82e35f 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -85,6 +85,7 @@ nfp_flower_support_decap_v2(const struct nfp_app_fw_flower *app_fw_flower) } int nfp_init_app_fw_flower(struct nfp_pf_dev *pf_dev); +void nfp_uninit_app_fw_flower(struct nfp_pf_dev *pf_dev); int nfp_secondary_init_app_fw_flower(struct nfp_cpp *cpp); uint16_t nfp_flower_pf_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts); diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 854d117..f615f02 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -561,12 +561,75 @@ nfp_flower_repr_free(struct nfp_flower_representor *repr, } } +/* Reset and stop device. The device can not be restarted. */ +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_txq *this_tx_q; + struct nfp_net_rxq *this_rx_q; + struct nfp_flower_representor *repr; + struct nfp_app_fw_flower *app_fw_flower; + + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + repr = dev->data->dev_private; + app_fw_flower = repr->app_fw_flower; + hw = app_fw_flower->pf_hw; + pf_dev = hw->pf_dev; + + /* + * We assume that the DPDK application is stopping all the + * threads/queues before calling the device close function. + */ + nfp_net_disable_queues(dev); + + /* Clear queues */ + for (i = 0; i < dev->data->nb_tx_queues; i++) { + this_tx_q = dev->data->tx_queues[i]; + nfp_net_reset_tx_queue(this_tx_q); + } + + for (i = 0; i < dev->data->nb_rx_queues; i++) { + this_rx_q = dev->data->rx_queues[i]; + nfp_net_reset_rx_queue(this_rx_q); + } + + if (pf_dev->app_fw_id != NFP_APP_FW_FLOWER_NIC) + return -EINVAL; + + nfp_flower_repr_free(repr, repr->repr_type); + + for (i = 0; i < MAX_FLOWER_VFS; i++) { + if (app_fw_flower->vf_reprs[i] != NULL) + return 0; + } + + for (i = 0; i < NFP_MAX_PHYPORTS; i++) { + if (app_fw_flower->phy_reprs[i] != NULL) + return 0; + } + + if (app_fw_flower->pf_repr != NULL) + return 0; + + /* Now it is safe to free all PF resources */ + nfp_uninit_app_fw_flower(pf_dev); + nfp_pf_uninit(pf_dev); + + return 0; +} + static const struct eth_dev_ops nfp_flower_pf_repr_dev_ops = { .dev_infos_get = nfp_flower_repr_dev_infos_get, .dev_start = nfp_flower_pf_start, .dev_configure = nfp_flower_repr_dev_configure, .dev_stop = nfp_flower_pf_stop, + .dev_close = nfp_flower_repr_dev_close, .rx_queue_setup = nfp_pf_repr_rx_queue_setup, .tx_queue_setup = nfp_pf_repr_tx_queue_setup, @@ -588,6 +651,7 @@ static const struct eth_dev_ops nfp_flower_repr_dev_ops = { .dev_start = nfp_flower_repr_dev_start, .dev_configure = nfp_flower_repr_dev_configure, .dev_stop = nfp_flower_repr_dev_stop, + .dev_close = nfp_flower_repr_dev_close, .rx_queue_setup = nfp_flower_repr_rx_queue_setup, .tx_queue_setup = nfp_flower_repr_tx_queue_setup, -- 2.39.1