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;
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;
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;
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