mt76: mt7615: wake device before pulling packets from mac80211 queues
authorLorenzo Bianconi <lorenzo@kernel.org>
Fri, 3 Jul 2020 08:15:53 +0000 (10:15 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 21 Jul 2020 17:01:17 +0000 (19:01 +0200)
Make sure the device is in full-power before pulling frames from
mac80211 queues

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mac.c
drivers/net/wireless/mediatek/mt76/mt7615/main.c

index e17cba62252f64f7ff4bec9742a3bbf3b61fcd14..f340e74c1a71eb84f2662a7b31a5adc53728db3b 100644 (file)
@@ -1841,9 +1841,13 @@ void mt7615_pm_wake_work(struct work_struct *work)
                                                pm.wake_work);
        mphy = dev->phy.mt76;
 
-       if (mt7615_driver_own(dev))
+       if (mt7615_driver_own(dev)) {
                dev_err(mphy->dev->dev, "failed to wake device\n");
+               goto out;
+       }
 
+       tasklet_schedule(&dev->mt76.tx_tasklet);
+out:
        complete_all(&dev->pm.wake_cmpl);
 }
 
index 47dca270150deac7d8dc2e83b62d6addc5d3b48a..3ff387f31659bd76459d9d53a4da7eb3a5ae96a8 100644 (file)
@@ -638,6 +638,24 @@ static void mt7615_sta_rate_tbl_update(struct ieee80211_hw *hw,
        spin_unlock_bh(&dev->mt76.lock);
 }
 
+static void
+mt7615_wake_tx_queue(struct ieee80211_hw *hw, struct ieee80211_txq *txq)
+{
+       struct mt7615_dev *dev = mt7615_hw_dev(hw);
+       struct mt7615_phy *phy = mt7615_hw_phy(hw);
+       struct mt76_phy *mphy = phy->mt76;
+
+       if (!test_bit(MT76_STATE_RUNNING, &mphy->state))
+               return;
+
+       if (test_bit(MT76_STATE_PM, &mphy->state)) {
+               queue_work(dev->mt76.wq, &dev->pm.wake_work);
+               return;
+       }
+
+       tasklet_schedule(&dev->mt76.tx_tasklet);
+}
+
 static void mt7615_tx(struct ieee80211_hw *hw,
                      struct ieee80211_tx_control *control,
                      struct sk_buff *skb)
@@ -1134,7 +1152,7 @@ const struct ieee80211_ops mt7615_ops = {
        .set_key = mt7615_set_key,
        .ampdu_action = mt7615_ampdu_action,
        .set_rts_threshold = mt7615_set_rts_threshold,
-       .wake_tx_queue = mt76_wake_tx_queue,
+       .wake_tx_queue = mt7615_wake_tx_queue,
        .sta_rate_tbl_update = mt7615_sta_rate_tbl_update,
        .sw_scan_start = mt76_sw_scan,
        .sw_scan_complete = mt76_sw_scan_complete,