From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 93827A04E7 for ; Wed, 4 Nov 2020 05:15:01 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5B711BE61; Wed, 4 Nov 2020 05:15:00 +0100 (CET) Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by dpdk.org (Postfix) with ESMTP id 030F6BE61 for ; Wed, 4 Nov 2020 05:14:57 +0100 (CET) Received: from DGGEMS408-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4CQtbG4RNkzkfCs; Wed, 4 Nov 2020 12:14:50 +0800 (CST) Received: from localhost (10.174.187.156) by DGGEMS408-HUB.china.huawei.com (10.3.19.208) with Microsoft SMTP Server id 14.3.487.0; Wed, 4 Nov 2020 12:14:46 +0800 From: wangyunjian To: CC: , , , , , Yunjian Wang Date: Wed, 4 Nov 2020 12:14:30 +0800 Message-ID: <1604463270-18936-1-git-send-email-wangyunjian@huawei.com> X-Mailer: git-send-email 1.9.5.msysgit.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.174.187.156] X-CFilter-Loop: Reflected Subject: [dpdk-stable] [PATCH 19.11] net/bnxt: fix memory leak when freeing VF info X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 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 Sender: "stable" From: Yunjian Wang [ upstream commit 9fb9a94caf48754e7643f32a5c419007c601d9f1 ] When freeing a vf_info, we should free the 'vlan_as_table' and 'vlan_table' for the vf_info. Fixes: b7778e8a1c00 ("net/bnxt: refactor to properly allocate resources for PF/VF") Signed-off-by: Yunjian Wang --- drivers/net/bnxt/bnxt_ethdev.c | 3 +-- drivers/net/bnxt/bnxt_hwrm.c | 16 +++++++++++++++- drivers/net/bnxt/bnxt_hwrm.h | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index a94b73623..1b1f130ed 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -4953,8 +4953,7 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) if (eth_dev->data->dev_started) bnxt_dev_close_op(eth_dev); - if (bp->pf.vf_info) - rte_free(bp->pf.vf_info); + bnxt_hwrm_free_vf_info(bp); eth_dev->dev_ops = NULL; eth_dev->rx_pkt_burst = NULL; eth_dev->tx_pkt_burst = NULL; diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 1fcba9955..5e7b7f006 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -589,6 +589,20 @@ static int bnxt_hwrm_ptp_qcfg(struct bnxt *bp) return 0; } +void bnxt_hwrm_free_vf_info(struct bnxt *bp) +{ + uint16_t i; + + for (i = 0; i < bp->pf.max_vfs; i++) { + rte_free(bp->pf.vf_info[i].vlan_table); + bp->pf.vf_info[i].vlan_table = NULL; + rte_free(bp->pf.vf_info[i].vlan_as_table); + bp->pf.vf_info[i].vlan_as_table = NULL; + } + rte_free(bp->pf.vf_info); + bp->pf.vf_info = NULL; +} + static int __bnxt_hwrm_func_qcaps(struct bnxt *bp) { int rc = 0; @@ -615,7 +629,7 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp) new_max_vfs = bp->pdev->max_vfs; if (new_max_vfs != bp->pf.max_vfs) { if (bp->pf.vf_info) - rte_free(bp->pf.vf_info); + bnxt_hwrm_free_vf_info(bp); bp->pf.vf_info = rte_zmalloc("bnxt_vf_info", sizeof(bp->pf.vf_info[0]) * new_max_vfs, 0); if (bp->pf.vf_info == NULL) { diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h index e647993af..8ceaeb59c 100644 --- a/drivers/net/bnxt/bnxt_hwrm.h +++ b/drivers/net/bnxt/bnxt_hwrm.h @@ -89,6 +89,7 @@ int bnxt_hwrm_func_buf_rgtr(struct bnxt *bp); int bnxt_hwrm_func_buf_unrgtr(struct bnxt *bp); int bnxt_hwrm_func_driver_register(struct bnxt *bp); int bnxt_hwrm_func_qcaps(struct bnxt *bp); +void bnxt_hwrm_free_vf_info(struct bnxt *bp); int bnxt_hwrm_func_reset(struct bnxt *bp); int bnxt_hwrm_func_driver_unregister(struct bnxt *bp, uint32_t flags); int bnxt_hwrm_func_qstats(struct bnxt *bp, uint16_t fid, -- 2.18.1