Drivers are not supposed to call ieee80211_wake_queue() while operating on off channel during sw scanning, but there is no clear way for the driver to know that it is operating on off channel during scanning. There are cases (unavailablity/availability of tx buffers in ath9k, for example) where driver needs to stop/restart tx queues during background scanning state, this might result in waking up the corresponding netif tx queue when the device is on off channel which is not desired. This patches fixes this by checking SCAN_OFF_CHANNEL bit in scanning before restarting the tx queue. Signed-off-by: Vasanthakumar Thiagarajan <vasanth@xxxxxxxxxxx> --- net/mac80211/util.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/net/mac80211/util.c b/net/mac80211/util.c index a54cf14..1938a67 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -277,7 +277,8 @@ static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue, __clear_bit(reason, &local->queue_stop_reasons[queue]); - if (local->queue_stop_reasons[queue] != 0) + if ((local->queue_stop_reasons[queue] != 0) || + test_bit(SCAN_OFF_CHANNEL, &local->scanning)) /* someone still has this queue stopped */ return; -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html