From: Johannes Berg Date: Wed, 28 Mar 2012 09:04:28 +0000 (+0200) Subject: mac80211: lazily stop queues in add_pending X-Git-Tag: v3.5-rc1~109^2~487^2^2~29 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=4644ae89033872a62b4fea6ca96b958e115efdc0;p=~emulex%2Finfiniband.git 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 Signed-off-by: John W. Linville --- diff --git a/net/mac80211/util.c b/net/mac80211/util.c index ef725cabb09..471a831066d 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, int queue, i; spin_lock_irqsave(&local->queue_stop_reason_lock, flags); - for (i = 0; i < hw->queues; i++) - __ieee80211_stop_queue(hw, i, - IEEE80211_QUEUE_STOP_REASON_SKB_ADD); - while ((skb = skb_dequeue(skbs))) { struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); @@ -398,6 +394,10 @@ void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, } queue = skb_get_queue_mapping(skb); + + __ieee80211_stop_queue(hw, queue, + IEEE80211_QUEUE_STOP_REASON_SKB_ADD); + __skb_queue_tail(&local->pending[queue], skb); }