Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+87 −114
Original line number Original line Diff line number Diff line
@@ -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)
		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,14 +3301,12 @@ 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;
@@ -3316,32 +3314,26 @@ static int bnxt_hwrm_ring_alloc(struct bnxt *bp)
		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;
@@ -3349,7 +3341,6 @@ static int bnxt_hwrm_ring_alloc(struct bnxt *bp)
		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) {
		for (i = 0; i < bp->rx_nr_rings; i++) {
		for (i = 0; i < bp->rx_nr_rings; i++) {
@@ -3416,14 +3407,13 @@ 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;
@@ -3431,17 +3421,14 @@ static int bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path)
		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(
			hwrm_ring_free_send_msg(bp, ring,
					bp, ring,
						RING_FREE_REQ_RING_TYPE_TX,
						RING_FREE_REQ_RING_TYPE_TX,
						close_path ? cmpl_ring_id :
						close_path ? cmpl_ring_id :
						INVALID_HW_RING_ID);
						INVALID_HW_RING_ID);
			ring->fw_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;
@@ -3449,58 +3436,44 @@ static int bnxt_hwrm_ring_free(struct bnxt *bp, bool close_path)
		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(
			hwrm_ring_free_send_msg(bp, ring,
					bp, ring,
						RING_FREE_REQ_RING_TYPE_RX,
						RING_FREE_REQ_RING_TYPE_RX,
						close_path ? cmpl_ring_id :
						close_path ? cmpl_ring_id :
						INVALID_HW_RING_ID);
						INVALID_HW_RING_ID);
			ring->fw_ring_id = INVALID_HW_RING_ID;
			ring->fw_ring_id = INVALID_HW_RING_ID;
				bp->grp_info[i].rx_fw_ring_id =
			bp->grp_info[i].rx_fw_ring_id = INVALID_HW_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 =
		struct bnxt_ring_struct *ring = &rxr->rx_agg_ring_struct;
						&rxr->rx_agg_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(
			hwrm_ring_free_send_msg(bp, ring,
					bp, ring,
						RING_FREE_REQ_RING_TYPE_RX,
						RING_FREE_REQ_RING_TYPE_RX,
						close_path ? cmpl_ring_id :
						close_path ? cmpl_ring_id :
						INVALID_HW_RING_ID);
						INVALID_HW_RING_ID);
			ring->fw_ring_id = INVALID_HW_RING_ID;
			ring->fw_ring_id = INVALID_HW_RING_ID;
				bp->grp_info[i].agg_fw_ring_id =
			bp->grp_info[i].agg_fw_ring_id = INVALID_HW_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(
			hwrm_ring_free_send_msg(bp, ring,
					bp, ring,
						RING_FREE_REQ_RING_TYPE_CMPL,
						RING_FREE_REQ_RING_TYPE_CMPL,
						INVALID_HW_RING_ID);
						INVALID_HW_RING_ID);
			ring->fw_ring_id = INVALID_HW_RING_ID;
			ring->fw_ring_id = INVALID_HW_RING_ID;
				bp->grp_info[i].cp_fw_ring_id =
			bp->grp_info[i].cp_fw_ring_id = INVALID_HW_RING_ID;
							INVALID_HW_RING_ID;
			}
		}
		}
	}
	}

	return rc;
}
}


int bnxt_hwrm_set_coal(struct bnxt *bp)
int bnxt_hwrm_set_coal(struct bnxt *bp)