aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/main.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-06-10 04:21:41 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-06-14 15:39:27 -0400
commita6a67db2bc89d2b1ff07e0817f11235c20d2c329 (patch)
tree1096c42ede83af4dbae34387246f91c0d6649baf /net/mac80211/main.c
parent5d22c89b9bea17a0e48e7534a9b237885e2c0809 (diff)
mac80211: refcount aggregation queue stop
mac80211 currently maintains the ampdu_lock to avoid starting a queue due to one aggregation session while another aggregation session needs the queue stopped. We can do better, however, and instead refcount the queue stops for this particular purpose, thus removing the need for the lock. This will help making ampdu_action able to sleep. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/main.c')
-rw-r--r--net/mac80211/main.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index a2d10d44641..c2e46e88f3c 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -463,8 +463,10 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
463 463
464 sta_info_init(local); 464 sta_info_init(local);
465 465
466 for (i = 0; i < IEEE80211_MAX_QUEUES; i++) 466 for (i = 0; i < IEEE80211_MAX_QUEUES; i++) {
467 skb_queue_head_init(&local->pending[i]); 467 skb_queue_head_init(&local->pending[i]);
468 atomic_set(&local->agg_queue_stop[i], 0);
469 }
468 tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending, 470 tasklet_init(&local->tx_pending_tasklet, ieee80211_tx_pending,
469 (unsigned long)local); 471 (unsigned long)local);
470 472
@@ -475,8 +477,6 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
475 skb_queue_head_init(&local->skb_queue); 477 skb_queue_head_init(&local->skb_queue);
476 skb_queue_head_init(&local->skb_queue_unreliable); 478 skb_queue_head_init(&local->skb_queue_unreliable);
477 479
478 spin_lock_init(&local->ampdu_lock);
479
480 return local_to_hw(local); 480 return local_to_hw(local);
481} 481}
482EXPORT_SYMBOL(ieee80211_alloc_hw); 482EXPORT_SYMBOL(ieee80211_alloc_hw);