diff options
author | Johannes Berg <johannes.berg@intel.com> | 2010-06-10 04:21:48 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-06-14 15:39:28 -0400 |
commit | cfcdbde35e2b621cf56bedc38a3a81e8c28addb9 (patch) | |
tree | cd0664681dc4629f7ce9a3319868eebb005060ff /net/mac80211/ht.c | |
parent | 83a5cbf73a13d0c8be019b22afec4407e4285aed (diff) |
mac80211: change TX aggregation locking
To prepare for allowing drivers to sleep in
ampdu_action, change the locking in the TX
aggregation code to use the mutex the RX part
already uses. The spinlock is still necessary
around some code to avoid races with TX, but
now we can also synchronize_net() to avoid
getting an inconsistent sequence number.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ht.c')
-rw-r--r-- | net/mac80211/ht.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c index e29be64083c3..be928ef7ef51 100644 --- a/net/mac80211/ht.c +++ b/net/mac80211/ht.c | |||
@@ -6,7 +6,7 @@ | |||
6 | * Copyright 2005-2006, Devicescape Software, Inc. | 6 | * Copyright 2005-2006, Devicescape Software, Inc. |
7 | * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> | 7 | * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> |
8 | * Copyright 2007, Michael Wu <flamingice@sourmilk.net> | 8 | * Copyright 2007, Michael Wu <flamingice@sourmilk.net> |
9 | * Copyright 2007-2008, Intel Corporation | 9 | * Copyright 2007-2010, Intel Corporation |
10 | * | 10 | * |
11 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License version 2 as | 12 | * it under the terms of the GNU General Public License version 2 as |
@@ -136,11 +136,7 @@ void ieee80211_ba_session_work(struct work_struct *work) | |||
136 | ___ieee80211_stop_rx_ba_session( | 136 | ___ieee80211_stop_rx_ba_session( |
137 | sta, tid, WLAN_BACK_RECIPIENT, | 137 | sta, tid, WLAN_BACK_RECIPIENT, |
138 | WLAN_REASON_QSTA_TIMEOUT); | 138 | WLAN_REASON_QSTA_TIMEOUT); |
139 | } | ||
140 | mutex_unlock(&sta->ampdu_mlme.mtx); | ||
141 | 139 | ||
142 | spin_lock_bh(&sta->lock); | ||
143 | for (tid = 0; tid < STA_TID_NUM; tid++) { | ||
144 | tid_tx = sta->ampdu_mlme.tid_tx[tid]; | 140 | tid_tx = sta->ampdu_mlme.tid_tx[tid]; |
145 | if (!tid_tx) | 141 | if (!tid_tx) |
146 | continue; | 142 | continue; |
@@ -152,7 +148,7 @@ void ieee80211_ba_session_work(struct work_struct *work) | |||
152 | ___ieee80211_stop_tx_ba_session(sta, tid, | 148 | ___ieee80211_stop_tx_ba_session(sta, tid, |
153 | WLAN_BACK_INITIATOR); | 149 | WLAN_BACK_INITIATOR); |
154 | } | 150 | } |
155 | spin_unlock_bh(&sta->lock); | 151 | mutex_unlock(&sta->ampdu_mlme.mtx); |
156 | } | 152 | } |
157 | 153 | ||
158 | void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, | 154 | void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, |