From patchwork Mon Dec 4 01:57:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 134776 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 E914843666; Mon, 4 Dec 2023 02:58:40 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7C8D440E78; Mon, 4 Dec 2023 02:57:56 +0100 (CET) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2096.outbound.protection.outlook.com [40.107.243.96]) by mails.dpdk.org (Postfix) with ESMTP id 3C95340E0F; Mon, 4 Dec 2023 02:57:55 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YsWS1T2tkSIhZDOl4hWPJu/wCFfx+1IJ2P8gXYFASpjxxLnWRZoLi4walRvTIK+TG5WKRAWGKrQo4GloMLlJLUUtTM3keAeARa7jlPp3V7vpvxjxhE8ouwPmgz5rVhIoLTIa7dK3LIaYlkVD2EL1WDwK0dSLxY8qdrcaGsy6229M63GQwaeAkr3gZEA5CU+4SbbGNFgGdA+jFhkAtkjbQjOC88bknipfk1YSmTQAoMEGBJm5YZy3Z1t9CnSSB2/0UBn+JZX6wPpnQ73iPDpSsBXB5Fd1F29HqQ9/2d1pXsfHEkxsL022xVir1SMCEZDrrTs2QigVfWuisEaQ3TmQ9w== 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=lGa+cgZr3ax8xKPH39g9JLw0wfs8OoRW/CH/ifyqZBg=; b=MQFTPSL6WEsUReWi4koSuCTN/ZljTX7/JEstzkzMSmQNUqQta7WHxTcUKw+i1Bka1s9iHpdH93oXEvt5l/aU68YEIgScwc/TdES9IJiILgOtmpDhUtyzYWlykj+SMb4h/0lEPfyomA2B5ZE3zqsIdeBRib7NN+iF8Jp/19aPSnLfrDOjM7Z056AttL4lvcONZvH6oIEW8GCuNvVyw7QBRcwe3zVWeWH58e8DSrw6Jlhn27MvOx7mOkpCeMCkYqt7L5Q3WTEcsL3M+TxL7V7VmuvyMU1gpBn7sCdEaVhbU85pkXBs7PN3GforYG6LXqN+tG7vaQly9XdwspJBR7cYwg== 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=lGa+cgZr3ax8xKPH39g9JLw0wfs8OoRW/CH/ifyqZBg=; b=TOVd7pWTXfT1jUqj8a4dIrqNgfkpcFJGhqntrSZpwEeE4cpzEg7oETaFfZflfjgGZKndHhjFWhU8LBOQ0on5+GgE8ICzXlSYN6TIre9TkQdRj8vQSfoTiW5mAYyZ2fsxeGMy6J5ABIJh/DwqGNi55c6XX8Je1ejfe1tEa9TviD0= 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 PH0PR13MB5876.namprd13.prod.outlook.com (2603:10b6:510:168::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7046.33; Mon, 4 Dec 2023 01:57:53 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::45b3:d83c:cff2:4a1b%6]) with mapi id 15.20.7046.033; Mon, 4 Dec 2023 01:57:53 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , stable@dpdk.org, Long Wu , Peng Zhang Subject: [PATCH v2 7/8] net/nfp: fix resource leak for exit of flower firmware Date: Mon, 4 Dec 2023 09:57:17 +0800 Message-Id: <20231204015718.780578-8-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231204015718.780578-1-chaoyong.he@corigine.com> References: <20231130085238.60290-1-chaoyong.he@corigine.com> <20231204015718.780578-1-chaoyong.he@corigine.com> X-ClientProxiedBy: PH0PR07CA0021.namprd07.prod.outlook.com (2603:10b6:510:5::26) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH0PR13MB5876:EE_ X-MS-Office365-Filtering-Correlation-Id: 73b3efac-98ff-4c1b-bbab-08dbf46c6d21 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1kONrajvB4y5vKjkZCAZ+c1xNpH/avLPOSEFOGvFj78Xsu1psaRNoqfnCavlvhqEoJ0W7bkg9YlM58RBhAFzW/N9qWgRFEQ8BafUMQGxwTzrTTT3ZXE8jP+gRSdEXL0BRRLep3Wqi6l4WBrZ7Foyci0aOmZZXc6/OoTE4hx3E64MplgRyvWwMuYg0hhjUu/8v1x5QbB4Ew+Am71RDQIdSNW2tpyuhJtVwCB2NEb36jdCfSD+b3jzbxDrIrG0UmBv+yv+WeNmKjhUcfkhva0tnWY4BKY5G6jNMp4o9OXLBgArWRp+tGS12lUdUxk3NL1d351JUfN+ogL+88fHAfGUosWGO5BQB+SE8qYokBVG4dlS5bd11ms/NTbDI3e+Vwk92Fef+qN9lDA31eDqwgpNY07Er3tH6jkICTgvSzgq7evrDvA1LB5ye5vRBfQ/t8B4OCfy115hhFpKQTko/sI5TkYsv+E/Ie04AnglUIRQja7mrLkTMYro+IDOATGp+NgR7S5g2t+GaKLS2BQQQW4WaP5G1dBlMcQdScSyOvIFij1R32ucPjMaZz4SkApobIAhWcLgfY7yA8USJfLibsvMb3B+NBe8nRnUP65dWY4M+pCsLtOX4GtAcKyUHTxyj2SCzQXFY0NQDRhg4JJOwmOwctwq1Z5fUt9yFcDQNFb1tW4= 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)(366004)(376002)(136003)(346002)(39830400003)(396003)(230922051799003)(186009)(64100799003)(451199024)(1800799012)(83380400001)(38100700002)(41300700001)(26005)(66556008)(66476007)(6916009)(66946007)(44832011)(5660300002)(8936002)(8676002)(4326008)(450100002)(316002)(54906003)(6512007)(6506007)(107886003)(1076003)(2616005)(6486002)(6666004)(52116002)(478600001)(2906002)(86362001)(36756003)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: KGjo4xUDLkwReVdbyAUv7m0yFO5gR+AM637WvYJvZnvY5DEDJaErR8JVnrDUMnJTX7kfNvZZ5YFCaQnYCQNx4sYryrG3cV8TY2tNkpbInGGQwhEfPVDf+FRfReBlhPPNMm7mt8Dd0JPXZpmdCqayPcjCl1+pXHHGwCeROA1wkOr+jLLlY+BgqrIgfPyK4NlI6CqmVtTBQDPazfTbh/DGOHWGfcnETbIwTThK23hs6wsm5dLSXU1PZqISbytxOJLZM3VHqoUqz9DO2gw4aGTlG7UW5lLske0nj4JG7YRnDU0d/dWV9wXi3bewg4wwgIMdAlWUDlKKXrNnyM/i6E//p3vg7uHlsLKth4Mba6aB5Ahta9z6PV5YvHwHYuJr8hmMxft/TQ4VvLR4CaBIL3QsgGPsuIBnqc8nbNCYbFYblDwIefU+BVlQgLV80dz92vboWgffeDw1vf7dV4uATuFnXWMSloSV9eLeNJf7A5+aDNPeuus3R3DJf/69nnWGXvIH6vv8ocSPGzLwu9j3oci+Ixpr0iC6cZ26+YYCi5AMBWxiE/VH5KOvR365lD3ViS3wF5Nf47dIrsM73r5r71oUyZX22apgzhUmUeQh+nZxUIO6dNiBxdhLSIR+EeJn39W6sZ4XxrM/aLGOHjB1F3I396HwFWO20T2EblbIPA63G3lg7q7LgLrwLdw1aOsL/S+4pKtK0TGDfkiQQSvrkRlwa+W5PqWaaY3xZDo67SJyK7au8VwzpOirZ38Y29T0VCi5lc+hv0wResmczKT5LAWa6UA19AZEhHUW8Z3MTShwdtH+t5glS62XQGk5Y4lsE4M8Uf5gj+bzrVVm8cxozPEuizn1uWD75HpzcEOx377V9fe+zUz1NUnoYFFoH3LaY5EUYfKbs3NVahGXpn02QpBbKe+OrfOm69jvS0RhHtmFc/zhAQO9gQyzTnIU4eE09au/3zswUkbT/ZBByrUphbI2k3pNSvNqqAuMVmYtfGl4gyFh5fkYg6DwtS5k18mms3VhLdbgxSuXfkEBKFInf1vHQyeHPPt1SY5+RODEznOnRC89nk8RveGp9xnJ2WUt+m7XT7zNlLoHU29anSORCa7VS3xRR6jegZ7kD1WKzCRzZR0ZL7jkoxy3OU9myJgdCBlgt84tnSAk/S8fzbKR6TKNyTiaWcAGfsHhkTtTt3S9aTzOVVH2ZAidDEPddrpxNptC69z6U8aVZ6aLcQXa2NrC4L3LBh4GU8BGx+c7h7xDpzUcBhfIsV2RemPEuo8Z6PoU8WCRUu7x/EoS6dEL+i5hsLh06DTMEoKETx0uncQ82IGUPiyo65TNZhaGeDIghARAZk8fBYRm7jwJX7V+dkV+XrG4DZFRov1tXqeYHsGqclpvNNmpWA5ww+GEX2Vx/etBXraVBOpo0C9+aVNk7iJslqXv03vs6PkGx3UG0hcmPnlL+ccW/FmKjARqVLNjWulzKYMgq6ccOvV0Kk54ekFE3u87l3R+PRKH3ls35JevEeY4M1z28/LOWLfHd/GeiasHFYSDh5A0r0tQg+KJZSYKiKuoAQMcI8pHPcruY2YAatF0Aci1oMFgeegEV2Pe0ccU4X426tghYWI3V9IAkLOXYA== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73b3efac-98ff-4c1b-bbab-08dbf46c6d21 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Dec 2023 01:57:53.0627 (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: /OudcxkQTumX8a3qcSu9tGTIl60KROzQD/zPin+fmVU/G+EaKcZ+ocR16/yavDdSe0B1M59mdqgfI2uco4zK0WGyaQFCvj/hxIwMZRjD4fE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR13MB5876 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 the resource leak problem in the exit logic of flower firmware. Fixes: e1124c4f8a45 ("net/nfp: add flower representor framework") Cc: stable@dpdk.org Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/flower/nfp_flower.c | 73 ++++--------------- drivers/net/nfp/flower/nfp_flower.h | 1 + .../net/nfp/flower/nfp_flower_representor.c | 64 ++++++++++++++++ 3 files changed, 80 insertions(+), 58 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower.c b/drivers/net/nfp/flower/nfp_flower.c index f172c8350d..f950ae233b 100644 --- a/drivers/net/nfp/flower/nfp_flower.c +++ b/drivers/net/nfp/flower/nfp_flower.c @@ -82,63 +82,6 @@ nfp_flower_pf_start(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 = 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); - - nfp_mtr_priv_uninit(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); - } - - /* 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->super, 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->qc_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, @@ -146,7 +89,6 @@ static const struct eth_dev_ops nfp_flower_pf_vnic_ops = { .dev_start = nfp_flower_pf_start, .dev_stop = nfp_net_stop, - .dev_close = nfp_flower_pf_close, }; static inline struct nfp_flower_representor * @@ -858,6 +800,21 @@ 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_mtr_priv_uninit(pf_dev); + nfp_flow_priv_uninit(pf_dev); + rte_free(app_fw_flower); +} + int nfp_secondary_init_app_fw_flower(struct nfp_pf_dev *pf_dev) { diff --git a/drivers/net/nfp/flower/nfp_flower.h b/drivers/net/nfp/flower/nfp_flower.h index 6f27c06acc..8393de66c5 100644 --- a/drivers/net/nfp/flower/nfp_flower.h +++ b/drivers/net/nfp/flower/nfp_flower.h @@ -106,6 +106,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, 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, struct rte_mbuf *mbuf, diff --git a/drivers/net/nfp/flower/nfp_flower_representor.c b/drivers/net/nfp/flower/nfp_flower_representor.c index 7212d9e024..02089d390e 100644 --- a/drivers/net/nfp/flower/nfp_flower_representor.c +++ b/drivers/net/nfp/flower/nfp_flower_representor.c @@ -328,12 +328,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_net_configure, .dev_stop = nfp_net_stop, + .dev_close = nfp_flower_repr_dev_close, .rx_queue_setup = nfp_net_rx_queue_setup, .tx_queue_setup = nfp_net_tx_queue_setup, @@ -356,6 +419,7 @@ static const struct eth_dev_ops nfp_flower_repr_dev_ops = { .dev_start = nfp_flower_repr_dev_start, .dev_configure = nfp_net_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,