From patchwork Thu Nov 30 08:52:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 134729 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 173454340A; Thu, 30 Nov 2023 09:53:44 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id F1BC942EC9; Thu, 30 Nov 2023 09:53:12 +0100 (CET) Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2099.outbound.protection.outlook.com [40.107.223.99]) by mails.dpdk.org (Postfix) with ESMTP id 619B742EC9; Thu, 30 Nov 2023 09:53:10 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DWJIBo4HshvQbTbAFw8o+c/0YR9RkCIoNCZk4qM3hb5caM9Dt0zDqagb/BLPxMFWX+ki8krlAXBNqWeP5vQKOVW0W0HCckhYp8kbbXbuULgVgsRSak9DGiREd6yyYSXHnSjQoiWoYgwQ7PYQJOQgea/amio78vS1yau8ZOqwdySQUYvS3/TihwBbaWUsMbSDShAvQEMGYuBOaFsK/EfHq1CSRtqhuMAYzLj8EXtjM6w5YoZQoL97FxblywzkEzJiaCTTxpXx0LRmjMouNaQGvdmmkUojtIN9yNNUHas6e3yE788qbMbHCtdlV0c6mWv78cggPxFXrhils52Y6DAH9g== 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=UEYYwTk+z6anJFza+U8Iix1gyJnKBCwM6XjaJzUh5uU=; b=iLxKf/T5sH6kQMcsfjT5FICmEQ1g1QE4i3jkXsjkaDH5AGmu1zHM5DkV7iyAyRgyetwsZ7hLlEJpuFODkTwDdBMMi13l83GjLX38dVUawcLznsdoyyPixcgwqleVw0uYfhQ2C4JFcjj/5Tng1raAfS9NBeYV3izICddvoyEC5gQftm0432JD8Of+K1HxzWJDNSseOddjFcHgXMUFIaz/NVCn3Wgw/bg9nRDKU488jWadvU5LU1GgiOPSJ7t0zXpM3qM+ejmOS1TXiM8FNLyEy//EM2/PApJjoHbiptlWx4dqEmQMctei2vbm8dxS6jTSK+KVWfpi+weiXp8QyQTyaQ== 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=UEYYwTk+z6anJFza+U8Iix1gyJnKBCwM6XjaJzUh5uU=; b=ElgOJETQATanl2fgJHmuO2J7O0/tMC7EEKEx7EniQd31ukE72UN0lwSx6ZQfx58UIejmYUE4+t7kOd43j/7uGDgpxwBJjS+gLK9rBdO97I1n2aHJgW5XBG+REPTJStove+XQsfM0yUpjXckY81exymoHqIb8j+gFXj25uqGOYwo= 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 SJ0PR13MB5381.namprd13.prod.outlook.com (2603:10b6:a03:3d2::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.25; Thu, 30 Nov 2023 08:53:08 +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.023; Thu, 30 Nov 2023 08:53:08 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Chaoyong He , stable@dpdk.org, Long Wu , Peng Zhang Subject: [PATCH 5/7] net/nfp: fix resource leak for exit of CoreNIC firmware Date: Thu, 30 Nov 2023 16:52:36 +0800 Message-Id: <20231130085238.60290-6-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20231130085238.60290-1-chaoyong.he@corigine.com> References: <20231130085238.60290-1-chaoyong.he@corigine.com> X-ClientProxiedBy: BYAPR08CA0056.namprd08.prod.outlook.com (2603:10b6:a03:117::33) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|SJ0PR13MB5381:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ba350eb-ac1f-4a71-0163-08dbf181c63e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UtJoo4aSaydbbEcbNGce9Swkhod1E7oym0UFq5K0LiD2P38JLMWBMIJ+3ur0vL6kH/lZR8IgbPwdJbNkQ6lRtg6AdMdXKpwYFtqX/iuzcRj0BW/f1fbNRBGBKiEG1L8rn3kwBEdyAwaExIK5Gr6foOULHYNRSErYrii0mDUwh09EeZgMiQCcv3BwCcEsYjFATywYR5Rv/7NwvotZAXqf9d9/BzutwQUQwTlfIw551piVc8CB26g46c7/ctMn2+d9ovUIKIsydl+9DDTD/Hq7rxw59XyGsyMaCYrWqBswEyU2SIT/T3l/6kO4LGbzmCtPaBFsY9/WvVzFmuGVAta0OWY39ZZknLtwk2FylwEpm/K1Pl3gSSdCg5qBz7ijNem03gmXHxrnwv7KkKVeB4bVfoHIOaBdb1/2eCycLfDzGQ20ddCvhAvgp7USfeeWtg9XZfSzT8DyaO3XaanB4Ty/tYDMFP6XyNHF8PPA3J7jIVlMt/bF9w5rqiF4UW+ya6rtM3QUR/40nm3hRI9q/fACx/zvidS4Ftnoog7ES/JUQDAs8AxAHNeHJVw/X7nzv+5X8+dHm7QLe/ItLJ5QRvahG2PZRGCeeWZKqmYBjFM1vZlR6sxJVbg/OGAsUCvnu4mys5/TJ+sADsWUzs+pH0kBrlKVWNBUttf/XwcvJe83ytMgntzGL3WGkR2ctRGiH28RZ9Tgla+oXV3I/A3/Mlz2uw== 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)(39840400004)(376002)(366004)(136003)(396003)(346002)(230922051799003)(64100799003)(186009)(451199024)(1800799012)(5660300002)(38100700002)(2906002)(36756003)(38350700005)(41300700001)(202311291699003)(86362001)(66476007)(107886003)(316002)(478600001)(54906003)(66556008)(6666004)(83380400001)(6916009)(52116002)(6486002)(6512007)(66946007)(1076003)(26005)(44832011)(2616005)(450100002)(8936002)(8676002)(4326008)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jSlf07DWWg+432L6qbEtPoH+4gcqir1zA9ATWwZHLyg1rS5i+XEKN3ZOqLtVZKHqJbrdHfAdixtB5qRf5MvBcrtos1sylnUb7wyFJJShDCSklN1DPRs2PsatDY6SbCp42N9AlKQNJQjxIdYKKJ7V83KeFzX1R5OnoK20rAChM9Ryj1Ihk2O1ChYAC0x8TauXKDjbPwTcCnoJbKI2CWzv0tPJd+ALvthpmVCaCFTKYtB5MUOJb+rRagO61uoMDVYLlGRn5yJnMRPtbTNIMbCkv5x8haV/ymj6AhNbQ/cAMMWF53MtP78t3TRtVpTx1P7Jastj7NSOjXqyK0fa+2rcoCbyKbKjkx+e44hlSGE7hnEhZoWK7OH0LfyPeqcDzVnIdJdAX4u5ZAULamyzvIA+42IZzk2PhlqmLmoZ8NUPZ0wbFMjqsfvkCbjaRYKhv2aQ1jVGDaOZ11s2ruHXFUm1bom0qpnRueuccTswpkyTMVOINsJYHZ3mJFgGZ74Wp8zGELjeqBbXRwqW2T+Q7WJSJZ2LCfaav+qF1c5JEK/YRovvpPCn2ST+zWmbx4YngGPEhIq8zjfl8quqaXHIJnrqlOFyWU3AtUWR94V0fyGpAkkWCsArKrqH5tH1PUgTY0h+CnaPFsdWR3H/DkCg5kzsVKy90KmRyvYbS1Git36pDFmjwZQ0PGkDPfMuaAIABPiJL/8gWxG6HPj/DjCy+mzcPFy2G5Ge2RupWj1zfsRb1ObQbWQLoARBkU490yttwTHiCCW+bsigiQvl4CYa3+kNONC2RKPIQpYNfa7Ss1f5UmSoyu9Bp8+Gibher2cnWRYXD0A0CzC1u8hV7WMTpk/FYcdv/UJC15p+eo+n4rfGYYH2iMOXaDFb6gs5RIpmAa6aB/s3fLJ+pnj+erwZY9tS840+iIHBS0sWWxleTBZcbe3zwkG3HGsbJsvc0p9RyW5vkBLITO6YAJPE8OZeVbmSSUNGBhUqRHigYgMMAy2bzoMClWHWr2NiyOk4vFcH4xwm8THHQjc5QcA84r+tddrW6HWnU2pCUp6CsVqNXKpfngPILez/5u6ECQaHUo/ZjajTPOI2gqOfbPMFKXoOVvtiy/XyYfBTwo6bKLbSh/HT+1rRLMjaSoCuWP72gCEs4NT4h17+ifEvf2y42rbB9998zG9GLznCeUkVTEAk1uj2RTA6DHbutLnPnFqLyaPgthDNg//2zm9838q1q89zvCYmRT1PdEPl+KpWouKsdB7sUmjThXrqKMWyr+w3PEFptaBKgYeUNoq22ESbKnLeK5M2UXENf72VXDTzHI3fLQoXZ9pQ0yDHxV1h/RSH4WOxlCtp0g+LHA0/ngTn6MmzCciulrioF5mv2EBPkDtVkXJe1BROsyIJCVFhwi5W0fWkjlAFM4KWSqb2OHoGYGFqPmaB3Yirpiw8XOaTmUk/XBiDfwoY3PJr4d/hsJlQz3cwQFPzq99BDbGwtCyM86gdH39mii2jjHIHOri5afhXVSwV0Rp/3htPas7N9W+UflF9a/0V3iU0ZacS+kg2acWwW5xaE7UbcZoXpOVPcZtXDwMCxM7OhLRz1F7+Zzl4nXOUGoPhGl+P5V0GJ0c4nXr0u9cDag== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ba350eb-ac1f-4a71-0163-08dbf181c63e X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2023 08:53:08.4969 (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: D+eeWRse+hPczDeE5J7XP+WyStdD6vkhQfwnOSeJcwmqMW7I+dSahc/ZXpq1Rm8+8LNynaAYH9lCVYIFKmfbK3jlozcfQwmSCEpRd0m7ouc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR13MB5381 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 CoreNIC firmware. Fixes: 646ea79ce481 ("net/nfp: move PF functions into its own file") Cc: stable@dpdk.org Signed-off-by: Chaoyong He Reviewed-by: Long Wu Reviewed-by: Peng Zhang --- drivers/net/nfp/nfp_ethdev.c | 94 ++++++++++++++++++++++++-------- drivers/net/nfp/nfp_net_common.h | 1 + 2 files changed, 73 insertions(+), 22 deletions(-) diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index bb0ddf3d54..5c5e658671 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -322,6 +322,54 @@ nfp_net_uninit(struct rte_eth_dev *eth_dev) nfp_cpp_area_release_free(net_hw->mac_stats_area); } +static void +nfp_cleanup_port_app_fw_nic(struct nfp_pf_dev *pf_dev, + uint8_t id) +{ + struct rte_eth_dev *eth_dev; + struct nfp_app_fw_nic *app_fw_nic; + + app_fw_nic = pf_dev->app_fw_priv; + if (app_fw_nic->ports[id] != NULL) { + eth_dev = app_fw_nic->ports[id]->eth_dev; + if (eth_dev != NULL) + nfp_net_uninit(eth_dev); + + app_fw_nic->ports[id] = NULL; + } +} + +static void +nfp_uninit_app_fw_nic(struct nfp_pf_dev *pf_dev) +{ + nfp_cpp_area_release_free(pf_dev->ctrl_area); + rte_free(pf_dev->app_fw_priv); +} + +void +nfp_pf_uninit(struct nfp_pf_dev *pf_dev) +{ + nfp_cpp_area_release_free(pf_dev->qc_area); + free(pf_dev->sym_tbl); + if (pf_dev->multi_pf.enabled) { + nfp_net_keepalive_stop(&pf_dev->multi_pf); + nfp_net_keepalive_uninit(&pf_dev->multi_pf); + } + free(pf_dev->nfp_eth_table); + free(pf_dev->hwinfo); + nfp_cpp_free(pf_dev->cpp); + rte_free(pf_dev); +} + +static int +nfp_pf_secondary_uninit(struct nfp_pf_dev *pf_dev) +{ + free(pf_dev->sym_tbl); + rte_free(pf_dev); + + return 0; +} + /* Reset and stop device. The device can not be restarted. */ static int nfp_net_close(struct rte_eth_dev *dev) @@ -333,14 +381,25 @@ nfp_net_close(struct rte_eth_dev *dev) struct rte_pci_device *pci_dev; struct nfp_app_fw_nic *app_fw_nic; - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return 0; - hw = dev->data->dev_private; pf_dev = hw->pf_dev; pci_dev = RTE_ETH_DEV_TO_PCI(dev); app_fw_nic = NFP_PRIV_TO_APP_FW_NIC(pf_dev->app_fw_priv); + /* + * In secondary process, a released eth device can be found by its name + * in shared memory. + * If the state of the eth device is RTE_ETH_DEV_UNUSED, it means the + * eth device has been released. + */ + if (rte_eal_process_type() == RTE_PROC_SECONDARY) { + if (dev->state == RTE_ETH_DEV_UNUSED) + return 0; + + nfp_pf_secondary_uninit(pf_dev); + return 0; + } + /* * We assume that the DPDK application is stopping all the * threads/queues before calling the device close function. @@ -351,16 +410,17 @@ nfp_net_close(struct rte_eth_dev *dev) nfp_net_close_tx_queue(dev); nfp_net_close_rx_queue(dev); - /* Clear ipsec */ - nfp_ipsec_uninit(dev); - /* Cancel possible impending LSC work here before releasing the port */ rte_eal_alarm_cancel(nfp_net_dev_interrupt_delayed_handler, (void *)dev); /* Only free PF resources after all physical ports have been closed */ /* Mark this port as unused and free device priv resources */ nn_cfg_writeb(&hw->super, NFP_NET_CFG_LSC, 0xff); - app_fw_nic->ports[hw->idx] = NULL; + + if (pf_dev->app_fw_id != NFP_APP_FW_CORE_NIC) + return -EINVAL; + + nfp_cleanup_port_app_fw_nic(pf_dev, hw->idx); for (i = 0; i < app_fw_nic->total_phyports; i++) { id = nfp_function_id_get(pf_dev, i); @@ -370,26 +430,16 @@ nfp_net_close(struct rte_eth_dev *dev) return 0; } - /* Now it is safe to free all PF resources */ - PMD_INIT_LOG(INFO, "Freeing PF resources"); - if (pf_dev->multi_pf.enabled) { - nfp_net_keepalive_stop(&pf_dev->multi_pf); - nfp_net_keepalive_uninit(&pf_dev->multi_pf); - } - 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_nic); - rte_free(pf_dev); - + /* Enable in nfp_net_start() */ rte_intr_disable(pci_dev->intr_handle); - /* Unregister callback func from eal lib */ + /* Register in nfp_net_init() */ rte_intr_callback_unregister(pci_dev->intr_handle, nfp_net_dev_interrupt_handler, (void *)dev); + nfp_uninit_app_fw_nic(pf_dev); + nfp_pf_uninit(pf_dev); + return 0; } diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 30fea7ae02..ded491cbdc 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -272,6 +272,7 @@ int nfp_net_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf); int nfp_net_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf); +void nfp_pf_uninit(struct nfp_pf_dev *pf_dev); #define NFP_PRIV_TO_APP_FW_NIC(app_fw_priv)\ ((struct nfp_app_fw_nic *)app_fw_priv)