mt76: mt7615: schedule tx tasklet and sta poll on mac tx free
authorFelix Fietkau <nbd@nbd.name>
Wed, 17 Jun 2020 13:21:39 +0000 (15:21 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 21 Jul 2020 17:01:15 +0000 (19:01 +0200)
Unlike on earlier chips, DMA completion on MT7615 does not imply actually
having sent out any packets.
Since AQL will prevent filling the hardware queues and will only allow more
packets to be passed to the driver after tx completion, it makes much more
sense to schedule the tx tasklet there.
This is also needed for scheduling tx in testmode support

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

index e5a965df899a174d7219a49522996627102ee4f9..1231a5ddf9ea32888cfe6299b03a59bfe18eb226 100644 (file)
@@ -122,10 +122,6 @@ static int mt7615_poll_tx(struct napi_struct *napi, int budget)
 
        mt7615_tx_cleanup(dev);
 
-       rcu_read_lock();
-       mt7615_mac_sta_poll(dev);
-       rcu_read_unlock();
-
        tasklet_schedule(&dev->mt76.tx_tasklet);
 
        return 0;
index d150fac50c004570ebcb01a83aa66e72ae54cd02..1dc291e8b766472a4d309e1fe329d4182e63f7fe 100644 (file)
@@ -1399,6 +1399,12 @@ static void mt7615_mac_tx_free(struct mt7615_dev *dev, struct sk_buff *skb)
        }
 
        dev_kfree_skb(skb);
+
+       rcu_read_lock();
+       mt7615_mac_sta_poll(dev);
+       rcu_read_unlock();
+
+       tasklet_schedule(&dev->mt76.tx_tasklet);
 }
 
 void mt7615_queue_rx_skb(struct mt76_dev *mdev, enum mt76_rxq_id q,