Commit c027aa92 authored by Vladimir Oltean's avatar Vladimir Oltean Committed by David S. Miller
Browse files

net: enetc: simplify callers of enetc_rxbd_next



When we iterate through the BDs in the RX ring, the software producer
index (which is already passed by value to enetc_rxbd_next) lags behind,
and we end up with this funny looking "++i == rx_ring->bd_count" check
so that we drag it after us.

Let's pass the software producer index "i" by reference, so that
enetc_rxbd_next can increment it by itself (mod rx_ring->bd_count),
especially since enetc_rxbd_next has to increment the index anyway.

Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4b47c0b8
Loading
Loading
Loading
Loading
+5 −16
Original line number Diff line number Diff line
@@ -479,13 +479,8 @@ static int enetc_refill_rx_ring(struct enetc_bdr *rx_ring, const int buff_cnt)
		/* clear 'R" as well */
		rxbd->r.lstatus = 0;

		rxbd = enetc_rxbd_next(rx_ring, rxbd, i);
		rx_swbd++;
		i++;
		if (unlikely(i == rx_ring->bd_count)) {
			i = 0;
			rx_swbd = rx_ring->rx_swbd;
		}
		enetc_rxbd_next(rx_ring, &rxbd, &i);
		rx_swbd = &rx_ring->rx_swbd[i];
	}

	if (likely(j)) {
@@ -700,9 +695,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,

		cleaned_cnt++;

		rxbd = enetc_rxbd_next(rx_ring, rxbd, i);
		if (unlikely(++i == rx_ring->bd_count))
			i = 0;
		enetc_rxbd_next(rx_ring, &rxbd, &i);

		if (unlikely(bd_status &
			     ENETC_RXBD_LSTATUS(ENETC_RXBD_ERR_MASK))) {
@@ -711,9 +704,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,
				dma_rmb();
				bd_status = le32_to_cpu(rxbd->r.lstatus);

				rxbd = enetc_rxbd_next(rx_ring, rxbd, i);
				if (unlikely(++i == rx_ring->bd_count))
					i = 0;
				enetc_rxbd_next(rx_ring, &rxbd, &i);
			}

			rx_ring->ndev->stats.rx_dropped++;
@@ -736,9 +727,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,

			cleaned_cnt++;

			rxbd = enetc_rxbd_next(rx_ring, rxbd, i);
			if (unlikely(++i == rx_ring->bd_count))
				i = 0;
			enetc_rxbd_next(rx_ring, &rxbd, &i);
		}

		rx_byte_cnt += skb->len;
+15 −8
Original line number Diff line number Diff line
@@ -121,19 +121,26 @@ static inline union enetc_rx_bd *enetc_rxbd(struct enetc_bdr *rx_ring, int i)
	return &(((union enetc_rx_bd *)rx_ring->bd_base)[hw_idx]);
}

static inline union enetc_rx_bd *enetc_rxbd_next(struct enetc_bdr *rx_ring,
						 union enetc_rx_bd *rxbd,
						 int i)
static inline void enetc_rxbd_next(struct enetc_bdr *rx_ring,
				   union enetc_rx_bd **old_rxbd, int *old_index)
{
	rxbd++;
	union enetc_rx_bd *new_rxbd = *old_rxbd;
	int new_index = *old_index;

	new_rxbd++;

#ifdef CONFIG_FSL_ENETC_PTP_CLOCK
	if (rx_ring->ext_en)
		rxbd++;
		new_rxbd++;
#endif
	if (unlikely(++i == rx_ring->bd_count))
		rxbd = rx_ring->bd_base;

	return rxbd;
	if (unlikely(++new_index == rx_ring->bd_count)) {
		new_rxbd = rx_ring->bd_base;
		new_index = 0;
	}

	*old_rxbd = new_rxbd;
	*old_index = new_index;
}

static inline union enetc_rx_bd *enetc_rxbd_ext(union enetc_rx_bd *rxbd)