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

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
...@@ -479,13 +479,8 @@ static int enetc_refill_rx_ring(struct enetc_bdr *rx_ring, const int buff_cnt) ...@@ -479,13 +479,8 @@ static int enetc_refill_rx_ring(struct enetc_bdr *rx_ring, const int buff_cnt)
/* clear 'R" as well */ /* clear 'R" as well */
rxbd->r.lstatus = 0; rxbd->r.lstatus = 0;
rxbd = enetc_rxbd_next(rx_ring, rxbd, i); enetc_rxbd_next(rx_ring, &rxbd, &i);
rx_swbd++; rx_swbd = &rx_ring->rx_swbd[i];
i++;
if (unlikely(i == rx_ring->bd_count)) {
i = 0;
rx_swbd = rx_ring->rx_swbd;
}
} }
if (likely(j)) { if (likely(j)) {
...@@ -700,9 +695,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring, ...@@ -700,9 +695,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,
cleaned_cnt++; cleaned_cnt++;
rxbd = enetc_rxbd_next(rx_ring, rxbd, i); enetc_rxbd_next(rx_ring, &rxbd, &i);
if (unlikely(++i == rx_ring->bd_count))
i = 0;
if (unlikely(bd_status & if (unlikely(bd_status &
ENETC_RXBD_LSTATUS(ENETC_RXBD_ERR_MASK))) { ENETC_RXBD_LSTATUS(ENETC_RXBD_ERR_MASK))) {
...@@ -711,9 +704,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring, ...@@ -711,9 +704,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,
dma_rmb(); dma_rmb();
bd_status = le32_to_cpu(rxbd->r.lstatus); bd_status = le32_to_cpu(rxbd->r.lstatus);
rxbd = enetc_rxbd_next(rx_ring, rxbd, i); enetc_rxbd_next(rx_ring, &rxbd, &i);
if (unlikely(++i == rx_ring->bd_count))
i = 0;
} }
rx_ring->ndev->stats.rx_dropped++; rx_ring->ndev->stats.rx_dropped++;
...@@ -736,9 +727,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring, ...@@ -736,9 +727,7 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,
cleaned_cnt++; cleaned_cnt++;
rxbd = enetc_rxbd_next(rx_ring, rxbd, i); enetc_rxbd_next(rx_ring, &rxbd, &i);
if (unlikely(++i == rx_ring->bd_count))
i = 0;
} }
rx_byte_cnt += skb->len; rx_byte_cnt += skb->len;
......
...@@ -121,19 +121,26 @@ static inline union enetc_rx_bd *enetc_rxbd(struct enetc_bdr *rx_ring, int i) ...@@ -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]); 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, static inline void enetc_rxbd_next(struct enetc_bdr *rx_ring,
union enetc_rx_bd *rxbd, union enetc_rx_bd **old_rxbd, int *old_index)
int i)
{ {
rxbd++; union enetc_rx_bd *new_rxbd = *old_rxbd;
int new_index = *old_index;
new_rxbd++;
#ifdef CONFIG_FSL_ENETC_PTP_CLOCK #ifdef CONFIG_FSL_ENETC_PTP_CLOCK
if (rx_ring->ext_en) if (rx_ring->ext_en)
rxbd++; new_rxbd++;
#endif #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) static inline union enetc_rx_bd *enetc_rxbd_ext(union enetc_rx_bd *rxbd)
......
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