mt76: only stop tx queues on offchannel, not during the entire scan

During scans, mac80211 frequently switches back to the home channel to
minimize interruption of ongoing traffic. Keep regular tx queues active
during that time.

Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
Felix Fietkau 2018-05-20 07:43:45 +02:00 committed by Kalle Valo
parent 66a77cbe63
commit 89bc67e3a9
3 changed files with 8 additions and 2 deletions

View File

@ -366,6 +366,11 @@ void mt76_set_channel(struct mt76_dev *dev)
struct mt76_channel_state *state;
bool offchannel = hw->conf.flags & IEEE80211_CONF_OFFCHANNEL;
if (offchannel)
set_bit(MT76_OFFCHANNEL, &dev->state);
else
clear_bit(MT76_OFFCHANNEL, &dev->state);
if (dev->drv->update_survey)
dev->drv->update_survey(dev);

View File

@ -189,6 +189,7 @@ enum {
MT76_STATE_RUNNING,
MT76_SCANNING,
MT76_RESET,
MT76_OFFCHANNEL,
};
struct mt76_hw_cap {

View File

@ -332,7 +332,7 @@ mt76_txq_send_burst(struct mt76_dev *dev, struct mt76_queue *hwq,
if (probe)
break;
if (test_bit(MT76_SCANNING, &dev->state) ||
if (test_bit(MT76_OFFCHANNEL, &dev->state) ||
test_bit(MT76_RESET, &dev->state))
return -EBUSY;
@ -385,7 +385,7 @@ restart:
bool empty = false;
int cur;
if (test_bit(MT76_SCANNING, &dev->state) ||
if (test_bit(MT76_OFFCHANNEL, &dev->state) ||
test_bit(MT76_RESET, &dev->state))
return -EBUSY;