Skip to content

Commit

Permalink
net: enetc: simplify callers of enetc_rxbd_next
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Vladimir Oltean authored and David S. Miller committed Mar 10, 2021
1 parent 4b47c0b commit c027aa9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 24 deletions.
21 changes: 5 additions & 16 deletions drivers/net/ethernet/freescale/enetc/enetc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)) {
Expand Down Expand Up @@ -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))) {
Expand All @@ -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++;
Expand All @@ -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;
Expand Down
23 changes: 15 additions & 8 deletions drivers/net/ethernet/freescale/enetc/enetc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit c027aa9

Please sign in to comment.