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 <joab...@synopsys.com>
Cc: Joao Pinto <jpi...@synopsys.com>
Cc: David S. Miller <da...@davemloft.net>
Cc: Giuseppe Cavallaro <peppe.cavall...@st.com>
Cc: Alexandre Torgue <alexandre.tor...@st.com>
---
 drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 0893af8b432d..bc949665c529 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -2049,12 +2049,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))
-- 
2.7.4

Reply via email to