Commit 14042cbe authored by Mattias Nissler's avatar Mattias Nissler Committed by John W. Linville

[PATCH] mac80211: Don't stop tx queue on master device while scanning.

mac80211 stops the tx queues during scans. This is wrong with respect
to the master deivce tx queue, since stopping it prevents any probes
from being sent during the scan. Instead, they accumulate in the queue
and are only sent after the scan is finished, which is obviously
wrong.
Signed-off-by: default avatarMattias Nissler <mattias.nissler@gmx.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0107136c
...@@ -2592,11 +2592,17 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw) ...@@ -2592,11 +2592,17 @@ void ieee80211_scan_completed(struct ieee80211_hw *hw)
read_lock(&local->sub_if_lock); read_lock(&local->sub_if_lock);
list_for_each_entry(sdata, &local->sub_if_list, list) { list_for_each_entry(sdata, &local->sub_if_list, list) {
/* No need to wake the master device. */
if (sdata->dev == local->mdev)
continue;
if (sdata->type == IEEE80211_IF_TYPE_STA) { if (sdata->type == IEEE80211_IF_TYPE_STA) {
if (sdata->u.sta.associated) if (sdata->u.sta.associated)
ieee80211_send_nullfunc(local, sdata, 0); ieee80211_send_nullfunc(local, sdata, 0);
ieee80211_sta_timer((unsigned long)sdata); ieee80211_sta_timer((unsigned long)sdata);
} }
netif_wake_queue(sdata->dev); netif_wake_queue(sdata->dev);
} }
read_unlock(&local->sub_if_lock); read_unlock(&local->sub_if_lock);
...@@ -2738,6 +2744,12 @@ static int ieee80211_sta_start_scan(struct net_device *dev, ...@@ -2738,6 +2744,12 @@ static int ieee80211_sta_start_scan(struct net_device *dev,
read_lock(&local->sub_if_lock); read_lock(&local->sub_if_lock);
list_for_each_entry(sdata, &local->sub_if_list, list) { list_for_each_entry(sdata, &local->sub_if_list, list) {
/* Don't stop the master interface, otherwise we can't transmit
* probes! */
if (sdata->dev == local->mdev)
continue;
netif_stop_queue(sdata->dev); netif_stop_queue(sdata->dev);
if (sdata->type == IEEE80211_IF_TYPE_STA && if (sdata->type == IEEE80211_IF_TYPE_STA &&
sdata->u.sta.associated) sdata->u.sta.associated)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment