Skip to content

Commit

Permalink
net/bnxt: fix error handling in VNIC prepare
Browse files Browse the repository at this point in the history
[ upstream commit 4171ac6 ]

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: d24610f ("net/bnxt: allow flow creation when RSS is enabled")

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>
  • Loading branch information
Kalesh AP authored and bluca committed Jul 12, 2021
1 parent 3d3770a commit 2f6cc4f
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions drivers/net/bnxt/bnxt_flow.c
Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit 2f6cc4f

Please sign in to comment.