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: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
4b47c0b81f
commit
c027aa9201
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user