diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-03-28 05:04:28 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-04-10 14:54:11 -0400 |
commit | 4644ae89033872a62b4fea6ca96b958e115efdc0 (patch) | |
tree | 579d4471e25d2ff6368242655d08f863f57fcefe /net/mac80211/util.c | |
parent | ada151252655b63409860e0795993cb369e667cc (diff) |
mac80211: lazily stop queues in add_pending
When adding pending SKBs there's no need to
stop all queues, we only need to stop those
that we're adding frames to. Implement that
by lazily stopping a queue as we add an SKB.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index ef725cabb099..471a831066dd 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -385,10 +385,6 @@ void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, | |||
385 | int queue, i; | 385 | int queue, i; |
386 | 386 | ||
387 | spin_lock_irqsave(&local->queue_stop_reason_lock, flags); | 387 | spin_lock_irqsave(&local->queue_stop_reason_lock, flags); |
388 | for (i = 0; i < hw->queues; i++) | ||
389 | __ieee80211_stop_queue(hw, i, | ||
390 | IEEE80211_QUEUE_STOP_REASON_SKB_ADD); | ||
391 | |||
392 | while ((skb = skb_dequeue(skbs))) { | 388 | while ((skb = skb_dequeue(skbs))) { |
393 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | 389 | struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |
394 | 390 | ||
@@ -398,6 +394,10 @@ void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, | |||
398 | } | 394 | } |
399 | 395 | ||
400 | queue = skb_get_queue_mapping(skb); | 396 | queue = skb_get_queue_mapping(skb); |
397 | |||
398 | __ieee80211_stop_queue(hw, queue, | ||
399 | IEEE80211_QUEUE_STOP_REASON_SKB_ADD); | ||
400 | |||
401 | __skb_queue_tail(&local->pending[queue], skb); | 401 | __skb_queue_tail(&local->pending[queue], skb); |
402 | } | 402 | } |
403 | 403 | ||