net/bnxt: fix error handling in VNIC prepare
Resources should be freed on error conditions. i.e, VNIC and VNIC context created in HW and memory allocated in bnxt_vnic_grp_alloc() should be freed. Added a new function bnxt_vnic_destroy() to do the cleanup. This lightweight function can be used in flow destroy/flush path to avoid duplicate code as well. Fixes: d24610f7bfda ("net/bnxt: allow flow creation when RSS is enabled") Cc: stable@dpdk.org Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com> Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com> Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
This commit is contained in:
parent
b93fe4db51
commit
4171ac66e5
@ -919,6 +919,19 @@ bnxt_get_l2_filter(struct bnxt *bp, struct bnxt_filter_info *nf,
|
||||
return l2_filter;
|
||||
}
|
||||
|
||||
static void bnxt_vnic_cleanup(struct bnxt *bp, struct bnxt_vnic_info *vnic)
|
||||
{
|
||||
if (vnic->rx_queue_cnt > 1)
|
||||
bnxt_hwrm_vnic_ctx_free(bp, vnic);
|
||||
|
||||
bnxt_hwrm_vnic_free(bp, vnic);
|
||||
|
||||
rte_free(vnic->fw_grp_ids);
|
||||
vnic->fw_grp_ids = NULL;
|
||||
|
||||
vnic->rx_queue_cnt = 0;
|
||||
}
|
||||
|
||||
static int bnxt_vnic_prep(struct bnxt *bp, struct bnxt_vnic_info *vnic,
|
||||
const struct rte_flow_action *act,
|
||||
struct rte_flow_error *error)
|
||||
@ -949,8 +962,6 @@ static int bnxt_vnic_prep(struct bnxt *bp, struct bnxt_vnic_info *vnic,
|
||||
goto ret;
|
||||
}
|
||||
|
||||
bp->nr_vnics++;
|
||||
|
||||
/* RSS context is required only when there is more than one RSS ring */
|
||||
if (vnic->rx_queue_cnt > 1) {
|
||||
rc = bnxt_hwrm_vnic_ctx_alloc(bp, vnic, 0);
|
||||
@ -986,9 +997,12 @@ static int bnxt_vnic_prep(struct bnxt *bp, struct bnxt_vnic_info *vnic,
|
||||
goto ret;
|
||||
}
|
||||
|
||||
bp->nr_vnics++;
|
||||
|
||||
return 0;
|
||||
|
||||
ret:
|
||||
bnxt_vnic_cleanup(bp, vnic);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user