diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-05-15 06:55:26 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-05-21 21:48:08 -0400 |
commit | 36d6825b91bc492b65b6333c369cd96a2fc8c903 (patch) | |
tree | 9113754ce110d593da8019a329c4afb229a036b3 /net | |
parent | c4680470a34a4f39af3d0a5c40f70befd8701908 (diff) |
mac80211: let drivers wake but not start queues
Having drivers start queues is just confusing, their ->start()
callback can block and do whatever is necessary, so let mac80211
start queues and have drivers wake queues when necessary (to get
packets flowing again right away.)
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/main.c | 8 | ||||
-rw-r--r-- | net/mac80211/util.c | 12 |
2 files changed, 7 insertions, 13 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index b0fddb7de549..9761d9bd5a79 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
@@ -110,7 +110,13 @@ static int ieee80211_master_open(struct net_device *dev) | |||
110 | break; | 110 | break; |
111 | } | 111 | } |
112 | } | 112 | } |
113 | return res; | 113 | |
114 | if (res) | ||
115 | return res; | ||
116 | |||
117 | netif_start_queue(local->mdev); | ||
118 | |||
119 | return 0; | ||
114 | } | 120 | } |
115 | 121 | ||
116 | static int ieee80211_master_stop(struct net_device *dev) | 122 | static int ieee80211_master_stop(struct net_device *dev) |
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 9cd07e1031af..800c15aff6e7 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -350,18 +350,6 @@ void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue) | |||
350 | } | 350 | } |
351 | EXPORT_SYMBOL(ieee80211_stop_queue); | 351 | EXPORT_SYMBOL(ieee80211_stop_queue); |
352 | 352 | ||
353 | void ieee80211_start_queues(struct ieee80211_hw *hw) | ||
354 | { | ||
355 | struct ieee80211_local *local = hw_to_local(hw); | ||
356 | int i; | ||
357 | |||
358 | for (i = 0; i < hw->queues + hw->ampdu_queues; i++) | ||
359 | clear_bit(IEEE80211_LINK_STATE_XOFF, &local->state[i]); | ||
360 | if (!ieee80211_qdisc_installed(local->mdev)) | ||
361 | netif_start_queue(local->mdev); | ||
362 | } | ||
363 | EXPORT_SYMBOL(ieee80211_start_queues); | ||
364 | |||
365 | void ieee80211_stop_queues(struct ieee80211_hw *hw) | 353 | void ieee80211_stop_queues(struct ieee80211_hw *hw) |
366 | { | 354 | { |
367 | int i; | 355 | int i; |