From patchwork Fri Jul 31 12:08:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yunjian Wang X-Patchwork-Id: 75103 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 73973A052B; Fri, 31 Jul 2020 14:09:09 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8628A1C025; Fri, 31 Jul 2020 14:09:08 +0200 (CEST) Received: from huawei.com (szxga06-in.huawei.com [45.249.212.32]) by dpdk.org (Postfix) with ESMTP id 3F28B1C00F; Fri, 31 Jul 2020 14:09:07 +0200 (CEST) Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.58]) by Forcepoint Email with ESMTP id 50927693A84C8DA873C7; Fri, 31 Jul 2020 20:09:04 +0800 (CST) Received: from localhost (10.174.185.168) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.487.0; Fri, 31 Jul 2020 20:08:57 +0800 From: wangyunjian To: CC: , , , , Yunjian Wang , Date: Fri, 31 Jul 2020 20:08:55 +0800 Message-ID: <4e9c6206a7fd6a119349df92ce6b3e625eedb2da.1596196484.git.wangyunjian@huawei.com> X-Mailer: git-send-email 1.9.5.msysgit.1 In-Reply-To: References: MIME-Version: 1.0 X-Originating-IP: [10.174.185.168] X-CFilter-Loop: Reflected Subject: [dpdk-dev] [PATCH 1/2] net/bnxt: fix memory leak when freeing vf_info X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Yunjian Wang 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") Cc: stable@dpdk.org 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 510a0d9e0..e64c147be 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -1360,8 +1360,7 @@ static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev) rte_memzone_free((const struct rte_memzone *)bp->rx_mem_zone); bp->rx_mem_zone = NULL; - rte_free(bp->pf->vf_info); - bp->pf->vf_info = NULL; + bnxt_hwrm_free_vf_info(bp); rte_free(bp->grp_info); bp->grp_info = NULL; diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 8296d1d44..643dd9897 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -670,6 +670,20 @@ static int bnxt_hwrm_ptp_qcfg(struct bnxt *bp) return 0; } +void bnxt_hwrm_free_vf_info(struct bnxt *bp) +{ + int 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; @@ -696,7 +710,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 4a2af13c9..eaabe1ffc 100644 --- a/drivers/net/bnxt/bnxt_hwrm.h +++ b/drivers/net/bnxt/bnxt_hwrm.h @@ -280,4 +280,5 @@ int bnxt_clear_one_vnic_filter(struct bnxt *bp, struct bnxt_filter_info *filter); int bnxt_hwrm_cfa_vfr_alloc(struct bnxt *bp, uint16_t vf_idx); int bnxt_hwrm_cfa_vfr_free(struct bnxt *bp, uint16_t vf_idx); +void bnxt_hwrm_free_vf_info(struct bnxt *bp); #endif