From: Somnath Kotur Date: Mon, 8 Jan 2018 20:24:36 +0000 (-0800) Subject: net/bnxt: free the aggregation ring X-Git-Tag: spdx-start~367 X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=ed5aab3d3e8745b70c81fb8a0c152ed28acb8d9d net/bnxt: free the aggregation ring bnxt_free_all_hwrm_rings() was freeing all the Rx Rings including zero-ing out the memory for the Aggregation rings, but was not issuing the FW cmd to destroy the AGG ring(s) from HW. This would manifest in problems when port stop/port start would be issued as there would be a HW ring leak every time port stop was issued. Fixes: daef48efe5e5 ("net/bnxt: support set MTU") Cc: stable@dpdk.org Signed-off-by: Somnath Kotur Signed-off-by: Ajit Khaparde --- diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 06737b1e1a..d88061c9fc 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -1783,10 +1783,17 @@ int bnxt_free_all_hwrm_rings(struct bnxt *bp) rxr->rx_ring_struct->ring_size * sizeof(*rxr->rx_buf_ring)); rxr->rx_prod = 0; + } + ring = rxr->ag_ring_struct; + if (ring->fw_ring_id != INVALID_HW_RING_ID) { + bnxt_hwrm_ring_free(bp, ring, + HWRM_RING_FREE_INPUT_RING_TYPE_RX); + ring->fw_ring_id = INVALID_HW_RING_ID; memset(rxr->ag_buf_ring, 0, - rxr->ag_ring_struct->ring_size * - sizeof(*rxr->ag_buf_ring)); + rxr->ag_ring_struct->ring_size * + sizeof(*rxr->ag_buf_ring)); rxr->ag_prod = 0; + bp->grp_info[i].ag_fw_ring_id = INVALID_HW_RING_ID; } if (cpr->cp_ring_struct->fw_ring_id != INVALID_HW_RING_ID) { bnxt_free_cp_ring(bp, cpr, idx);