mt76: mt7615: do not do any work in napi poll after calling napi_complete_done()
authorFelix Fietkau <nbd@nbd.name>
Fri, 7 Aug 2020 18:52:20 +0000 (20:52 +0200)
committerFelix Fietkau <nbd@nbd.name>
Thu, 24 Sep 2020 16:10:14 +0000 (18:10 +0200)
Fixes a race condition where multiple tx cleanup tasks could run in parallel

Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/dma.c

index c876eb1e1681f8b5de29a677a5d20d9b0b6eed5a..3b375fdf31b8ec97cfafdee813f0f5aed8032d7f 100644 (file)
@@ -117,14 +117,12 @@ static int mt7615_poll_tx(struct napi_struct *napi, int budget)
 
        mt7615_tx_cleanup(dev);
 
-       if (napi_complete_done(napi, 0))
-               mt7615_irq_enable(dev, MT_INT_TX_DONE_ALL);
-
-       mt7615_tx_cleanup(dev);
-
        mt7615_pm_power_save_sched(dev);
        tasklet_schedule(&dev->mt76.tx_tasklet);
 
+       if (napi_complete_done(napi, 0))
+               mt7615_irq_enable(dev, MT_INT_TX_DONE_ALL);
+
        return 0;
 }