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 0BC02A0526 for ; Wed, 25 Nov 2020 03:23:16 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0572EC93C; Wed, 25 Nov 2020 03:23:15 +0100 (CET) Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) by dpdk.org (Postfix) with ESMTP id 95AEFC93C for ; Wed, 25 Nov 2020 03:23:13 +0100 (CET) Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4Cgl6C5cbVzLtPs; Wed, 25 Nov 2020 10:22:43 +0800 (CST) Received: from localhost (10.174.187.156) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.487.0; Wed, 25 Nov 2020 10:23:01 +0800 From: wangyunjian To: CC: , , , , Yunjian Wang Date: Wed, 25 Nov 2020 10:23:01 +0800 Message-ID: <1606270981-59840-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 18.11 1/2] 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 c17fd3c55..82c54c3a7 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -3520,8 +3520,7 @@ bnxt_dev_uninit(struct rte_eth_dev *eth_dev) if (bp->dev_stopped == 0) 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 cf6f6d292..7c8ec7136 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -507,6 +507,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; @@ -533,7 +547,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_malloc("bnxt_vf_info", sizeof(bp->pf.vf_info[0]) * new_max_vfs, 0); bp->pf.max_vfs = new_max_vfs; diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h index 0300bae4a..eadd3d64c 100644 --- a/drivers/net/bnxt/bnxt_hwrm.h +++ b/drivers/net/bnxt/bnxt_hwrm.h @@ -60,6 +60,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