Commit edd0c2cc authored by Michael Chan's avatar Michael Chan Committed by David S. Miller

bnxt_en: Optimize ring alloc and ring free functions.

Remove the unnecessary "if" statement before the "for" statement:

if (x) {
        for (i = 0; i < x; i++)
...
}

Also, change the ring free function to return void as it only returns 0.
Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent be58a0da
...@@ -1969,11 +1969,12 @@ static int bnxt_init_one_rx_ring(struct bnxt *bp, int ring_nr) ...@@ -1969,11 +1969,12 @@ static int bnxt_init_one_rx_ring(struct bnxt *bp, int ring_nr)
rxr->rx_prod = prod; rxr->rx_prod = prod;
ring->fw_ring_id = INVALID_HW_RING_ID; ring->fw_ring_id = INVALID_HW_RING_ID;
ring = &rxr->rx_agg_ring_struct;
ring->fw_ring_id = INVALID_HW_RING_ID;
if (!(bp->flags & BNXT_FLAG_AGG_RINGS)) if (!(bp->flags & BNXT_FLAG_AGG_RINGS))
return 0; return 0;
ring = &rxr->rx_agg_ring_struct;
type = ((u32)PAGE_SIZE << RX_BD_LEN_SHIFT) | type = ((u32)PAGE_SIZE << RX_BD_LEN_SHIFT) |
RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP; RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP;
...@@ -1989,7 +1990,6 @@ static int bnxt_init_one_rx_ring(struct bnxt *bp, int ring_nr) ...@@ -1989,7 +1990,6 @@ static int bnxt_init_one_rx_ring(struct bnxt *bp, int ring_nr)
prod = NEXT_RX_AGG(prod); prod = NEXT_RX_AGG(prod);
} }
rxr->rx_agg_prod = prod; rxr->rx_agg_prod = prod;
ring->fw_ring_id = INVALID_HW_RING_ID;
if (bp->flags & BNXT_FLAG_TPA) { if (bp->flags & BNXT_FLAG_TPA) {
if (rxr->rx_tpa) { if (rxr->rx_tpa) {
...@@ -3301,54 +3301,45 @@ static int bnxt_hwrm_ring_alloc(struct bnxt *bp) ...@@ -3301,54 +3301,45 @@ static int bnxt_hwrm_ring_alloc(struct bnxt *bp)
{ {
int i, rc = 0; int i, rc = 0;
if (bp->cp_nr_rings) { for (i = 0; i < bp->cp_nr_rings; i++) {
for (i = 0; i < bp->cp_nr_rings; i++) { struct bnxt_napi *bnapi = bp->bnapi[i];
struct bnxt_napi *bnapi = bp->bnapi[i]; struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring; struct bnxt_ring_struct *ring = &cpr->cp_ring_struct;
struct bnxt_ring_struct *ring = &cpr->cp_ring_struct;
rc = hwrm_ring_alloc_send_msg(bp, ring, rc = hwrm_ring_alloc_send_msg(bp, ring, HWRM_RING_ALLOC_CMPL, i,
HWRM_RING_ALLOC_CMPL, i, INVALID_STATS_CTX_ID);
INVALID_STATS_CTX_ID); if (rc)
if (rc) goto err_out;
goto err_out; cpr->cp_doorbell = bp->bar1 + i * 0x80;
cpr->cp_doorbell = bp->bar1 + i * 0x80; BNXT_CP_DB(cpr->cp_doorbell, cpr->cp_raw_cons);
BNXT_CP_DB(cpr->cp_doorbell, cpr->cp_raw_cons); bp->grp_info[i].cp_fw_ring_id = ring->fw_ring_id;
bp->grp_info[i].cp_fw_ring_id = ring->fw_ring_id;
}
} }
if (bp->tx_nr_rings) { for (i = 0; i < bp->tx_nr_rings; i++) {
for (i = 0; i < bp->tx_nr_rings; i++) { struct bnxt_napi *bnapi = bp->bnapi[i];
struct bnxt_napi *bnapi = bp->bnapi[i]; struct bnxt_tx_ring_info *txr = &bnapi->tx_ring;
struct bnxt_tx_ring_info *txr = &bnapi->tx_ring; struct bnxt_ring_struct *ring = &txr->tx_ring_struct;
struct bnxt_ring_struct *ring = &txr->tx_ring_struct; u16 fw_stats_ctx = bp->grp_info[i].fw_stats_ctx;
u16 fw_stats_ctx = bp->grp_info[i].fw_stats_ctx;
rc = hwrm_ring_alloc_send_msg(bp, ring, rc = hwrm_ring_alloc_send_msg(bp, ring, HWRM_RING_ALLOC_TX, i,
HWRM_RING_ALLOC_TX, i, fw_stats_ctx);
fw_stats_ctx); if (rc)
if (rc) goto err_out;
goto err_out; txr->tx_doorbell = bp->bar1 + i * 0x80;
txr->tx_doorbell = bp->bar1 + i * 0x80;
}
} }
if (bp->rx_nr_rings) { for (i = 0; i < bp->rx_nr_rings; i++) {
for (i = 0; i < bp->rx_nr_rings; i++) { struct bnxt_napi *bnapi = bp->bnapi[i];
struct bnxt_napi *bnapi = bp->bnapi[i]; struct bnxt_rx_ring_info *rxr = &bnapi->rx_ring;
struct bnxt_rx_ring_info *rxr = &bnapi->rx_ring; struct bnxt_ring_struct *ring = &rxr->rx_ring_struct;
struct bnxt_ring_struct *ring = &rxr->rx_ring_struct;
rc = hwrm_ring_alloc_send_msg(bp, ring, rc = hwrm_ring_alloc_send_msg(bp, ring, HWRM_RING_ALLOC_RX, i,
HWRM_RING_ALLOC_RX, i, INVALID_STATS_CTX_ID);
INVALID_STATS_CTX_ID); if (rc)
if (rc) goto err_out;
goto err_out; rxr->rx_doorbell = bp->bar1 + i * 0x80;
rxr->rx_doorbell = bp->bar1 + i * 0x80; writel(DB_KEY_RX | rxr->rx_prod, rxr->rx_doorbell);
writel(DB_KEY_RX | rxr->rx_prod, rxr->rx_doorbell); bp->grp_info[i].rx_fw_ring_id = ring->fw_ring_id;
bp->grp_info[i].rx_fw_ring_id = ring->fw_ring_id;
}
} }
if (bp->flags & BNXT_FLAG_AGG_RINGS) { if (bp->flags & BNXT_FLAG_AGG_RINGS) {
...@@ -3416,91 +3407,73 @@ static int hwrm_ring_free_send_msg(struct bnxt *bp, ...@@ -3416,91 +3407,73 @@ static int hwrm_ring_free_send_msg(struct bnxt *bp,
return 0; return 0;
} }
static int bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path) static void bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path)
{ {
int i, rc = 0; int i;
if (!bp->bnapi) if (!bp->bnapi)
return 0; return;
if (bp->tx_nr_rings) { for (i = 0; i < bp->tx_nr_rings; i++) {
for (i = 0; i < bp->tx_nr_rings; i++) { struct bnxt_napi *bnapi = bp->bnapi[i];
struct bnxt_napi *bnapi = bp->bnapi[i]; struct bnxt_tx_ring_info *txr = &bnapi->tx_ring;
struct bnxt_tx_ring_info *txr = &bnapi->tx_ring; struct bnxt_ring_struct *ring = &txr->tx_ring_struct;
struct bnxt_ring_struct *ring = &txr->tx_ring_struct; u32 cmpl_ring_id = bp->grp_info[i].cp_fw_ring_id;
u32 cmpl_ring_id = bp->grp_info[i].cp_fw_ring_id;
if (ring->fw_ring_id != INVALID_HW_RING_ID) {
if (ring->fw_ring_id != INVALID_HW_RING_ID) { hwrm_ring_free_send_msg(bp, ring,
hwrm_ring_free_send_msg( RING_FREE_REQ_RING_TYPE_TX,
bp, ring, close_path ? cmpl_ring_id :
RING_FREE_REQ_RING_TYPE_TX, INVALID_HW_RING_ID);
close_path ? cmpl_ring_id : ring->fw_ring_id = INVALID_HW_RING_ID;
INVALID_HW_RING_ID);
ring->fw_ring_id = INVALID_HW_RING_ID;
}
} }
} }
if (bp->rx_nr_rings) { for (i = 0; i < bp->rx_nr_rings; i++) {
for (i = 0; i < bp->rx_nr_rings; i++) { struct bnxt_napi *bnapi = bp->bnapi[i];
struct bnxt_napi *bnapi = bp->bnapi[i]; struct bnxt_rx_ring_info *rxr = &bnapi->rx_ring;
struct bnxt_rx_ring_info *rxr = &bnapi->rx_ring; struct bnxt_ring_struct *ring = &rxr->rx_ring_struct;
struct bnxt_ring_struct *ring = &rxr->rx_ring_struct; u32 cmpl_ring_id = bp->grp_info[i].cp_fw_ring_id;
u32 cmpl_ring_id = bp->grp_info[i].cp_fw_ring_id;
if (ring->fw_ring_id != INVALID_HW_RING_ID) {
if (ring->fw_ring_id != INVALID_HW_RING_ID) { hwrm_ring_free_send_msg(bp, ring,
hwrm_ring_free_send_msg( RING_FREE_REQ_RING_TYPE_RX,
bp, ring, close_path ? cmpl_ring_id :
RING_FREE_REQ_RING_TYPE_RX, INVALID_HW_RING_ID);
close_path ? cmpl_ring_id : ring->fw_ring_id = INVALID_HW_RING_ID;
INVALID_HW_RING_ID); bp->grp_info[i].rx_fw_ring_id = INVALID_HW_RING_ID;
ring->fw_ring_id = INVALID_HW_RING_ID;
bp->grp_info[i].rx_fw_ring_id =
INVALID_HW_RING_ID;
}
} }
} }
if (bp->rx_agg_nr_pages) { for (i = 0; i < bp->rx_nr_rings; i++) {
for (i = 0; i < bp->rx_nr_rings; i++) { struct bnxt_napi *bnapi = bp->bnapi[i];
struct bnxt_napi *bnapi = bp->bnapi[i]; struct bnxt_rx_ring_info *rxr = &bnapi->rx_ring;
struct bnxt_rx_ring_info *rxr = &bnapi->rx_ring; struct bnxt_ring_struct *ring = &rxr->rx_agg_ring_struct;
struct bnxt_ring_struct *ring = u32 cmpl_ring_id = bp->grp_info[i].cp_fw_ring_id;
&rxr->rx_agg_ring_struct;
u32 cmpl_ring_id = bp->grp_info[i].cp_fw_ring_id; if (ring->fw_ring_id != INVALID_HW_RING_ID) {
hwrm_ring_free_send_msg(bp, ring,
if (ring->fw_ring_id != INVALID_HW_RING_ID) { RING_FREE_REQ_RING_TYPE_RX,
hwrm_ring_free_send_msg( close_path ? cmpl_ring_id :
bp, ring, INVALID_HW_RING_ID);
RING_FREE_REQ_RING_TYPE_RX, ring->fw_ring_id = INVALID_HW_RING_ID;
close_path ? cmpl_ring_id : bp->grp_info[i].agg_fw_ring_id = INVALID_HW_RING_ID;
INVALID_HW_RING_ID);
ring->fw_ring_id = INVALID_HW_RING_ID;
bp->grp_info[i].agg_fw_ring_id =
INVALID_HW_RING_ID;
}
} }
} }
if (bp->cp_nr_rings) { for (i = 0; i < bp->cp_nr_rings; i++) {
for (i = 0; i < bp->cp_nr_rings; i++) { struct bnxt_napi *bnapi = bp->bnapi[i];
struct bnxt_napi *bnapi = bp->bnapi[i]; struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring; struct bnxt_ring_struct *ring = &cpr->cp_ring_struct;
struct bnxt_ring_struct *ring = &cpr->cp_ring_struct;
if (ring->fw_ring_id != INVALID_HW_RING_ID) {
if (ring->fw_ring_id != INVALID_HW_RING_ID) { hwrm_ring_free_send_msg(bp, ring,
hwrm_ring_free_send_msg( RING_FREE_REQ_RING_TYPE_CMPL,
bp, ring, INVALID_HW_RING_ID);
RING_FREE_REQ_RING_TYPE_CMPL, ring->fw_ring_id = INVALID_HW_RING_ID;
INVALID_HW_RING_ID); bp->grp_info[i].cp_fw_ring_id = INVALID_HW_RING_ID;
ring->fw_ring_id = INVALID_HW_RING_ID;
bp->grp_info[i].cp_fw_ring_id =
INVALID_HW_RING_ID;
}
} }
} }
return rc;
} }
int bnxt_hwrm_set_coal(struct bnxt *bp) int bnxt_hwrm_set_coal(struct bnxt *bp)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment