mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-28 05:34:13 -05:00
bnxt_en: Refactor TX ring free logic
Add a new bnxt_hwrm_tx_ring_free() function to handle freeing a HW transmit ring. The new function will also be used in the next patch to free the TX ring in queue_stop. Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Link: https://patch.msgid.link/20250213011240.1640031-10-michael.chan@broadcom.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
6b6bf60fc9
commit
c8a0f7652d
@@ -7368,6 +7368,23 @@ static int hwrm_ring_free_send_msg(struct bnxt *bp,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void bnxt_hwrm_tx_ring_free(struct bnxt *bp,
|
||||
struct bnxt_tx_ring_info *txr,
|
||||
bool close_path)
|
||||
{
|
||||
struct bnxt_ring_struct *ring = &txr->tx_ring_struct;
|
||||
u32 cmpl_ring_id;
|
||||
|
||||
if (ring->fw_ring_id == INVALID_HW_RING_ID)
|
||||
return;
|
||||
|
||||
cmpl_ring_id = close_path ? bnxt_cp_ring_for_tx(bp, txr) :
|
||||
INVALID_HW_RING_ID;
|
||||
hwrm_ring_free_send_msg(bp, ring, RING_FREE_REQ_RING_TYPE_TX,
|
||||
cmpl_ring_id);
|
||||
ring->fw_ring_id = INVALID_HW_RING_ID;
|
||||
}
|
||||
|
||||
static void bnxt_hwrm_rx_ring_free(struct bnxt *bp,
|
||||
struct bnxt_rx_ring_info *rxr,
|
||||
bool close_path)
|
||||
@@ -7447,20 +7464,8 @@ static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path)
|
||||
if (!bp->bnapi)
|
||||
return;
|
||||
|
||||
for (i = 0; i < bp->tx_nr_rings; i++) {
|
||||
struct bnxt_tx_ring_info *txr = &bp->tx_ring[i];
|
||||
struct bnxt_ring_struct *ring = &txr->tx_ring_struct;
|
||||
|
||||
if (ring->fw_ring_id != INVALID_HW_RING_ID) {
|
||||
u32 cmpl_ring_id = bnxt_cp_ring_for_tx(bp, txr);
|
||||
|
||||
hwrm_ring_free_send_msg(bp, ring,
|
||||
RING_FREE_REQ_RING_TYPE_TX,
|
||||
close_path ? cmpl_ring_id :
|
||||
INVALID_HW_RING_ID);
|
||||
ring->fw_ring_id = INVALID_HW_RING_ID;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < bp->tx_nr_rings; i++)
|
||||
bnxt_hwrm_tx_ring_free(bp, &bp->tx_ring[i], close_path);
|
||||
|
||||
bnxt_cancel_dim(bp);
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
|
||||
Reference in New Issue
Block a user