diff options
author | Johannes Berg <johannes.berg@intel.com> | 2010-06-10 04:21:41 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-06-14 15:39:27 -0400 |
commit | a6a67db2bc89d2b1ff07e0817f11235c20d2c329 (patch) | |
tree | 1096c42ede83af4dbae34387246f91c0d6649baf /net/mac80211/main.c | |
parent | 5d22c89b9bea17a0e48e7534a9b237885e2c0809 (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.c | 6 |
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 | } |
482 | EXPORT_SYMBOL(ieee80211_alloc_hw); | 482 | EXPORT_SYMBOL(ieee80211_alloc_hw); |