net: enetc: simplify callers of enetc_rxbd_next
authorVladimir Oltean <olteanv@gmail.com>
Wed, 10 Mar 2021 12:03:47 +0000 (14:03 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 10 Mar 2021 21:14:15 +0000 (13:14 -0800)
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>
drivers/net/ethernet/freescale/enetc/enetc.c
drivers/net/ethernet/freescale/enetc/enetc.h

index 53c8a69..7bf56dd 100644 (file)
@@ -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;
index af8b8be..30b9ad5 100644 (file)
@@ -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)