net: stmmac: Only disable interrupts if NAPI is scheduled
authorJose Abreu <Jose.Abreu@synopsys.com>
Fri, 28 Jun 2019 07:29:20 +0000 (09:29 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 28 Jun 2019 16:23:39 +0000 (09:23 -0700)
Only disable the interrupts if RX NAPI gets to be scheduled. Also,
schedule the TX NAPI only when the interrupts are disabled.

Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Cc: Joao Pinto <jpinto@synopsys.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index a629b3144a0dcaaa5acd5e4046777995f5a9aed4..3425d4dda03d64ca41e9cf9f81b5f8d580948883 100644 (file)
@@ -2053,12 +2053,12 @@ static int stmmac_napi_check(struct stmmac_priv *priv, u32 chan)
                                                 &priv->xstats, chan);
        struct stmmac_channel *ch = &priv->channel[chan];
 
-       if (status)
-               status |= handle_rx | handle_tx;
-
        if ((status & handle_rx) && (chan < priv->plat->rx_queues_to_use)) {
-               stmmac_disable_dma_irq(priv, priv->ioaddr, chan);
-               napi_schedule_irqoff(&ch->rx_napi);
+               if (napi_schedule_prep(&ch->rx_napi)) {
+                       stmmac_disable_dma_irq(priv, priv->ioaddr, chan);
+                       __napi_schedule_irqoff(&ch->rx_napi);
+                       status |= handle_tx;
+               }
        }
 
        if ((status & handle_tx) && (chan < priv->plat->tx_queues_to_use))