diff options
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r-- | net/mac80211/util.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 051a02ddcb85..32a7a53833c0 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
@@ -247,7 +247,8 @@ static void __ieee80211_wake_txqs(struct ieee80211_sub_if_data *sdata, int ac) | |||
247 | struct sta_info *sta; | 247 | struct sta_info *sta; |
248 | int i; | 248 | int i; |
249 | 249 | ||
250 | spin_lock_bh(&fq->lock); | 250 | local_bh_disable(); |
251 | spin_lock(&fq->lock); | ||
251 | 252 | ||
252 | if (sdata->vif.type == NL80211_IFTYPE_AP) | 253 | if (sdata->vif.type == NL80211_IFTYPE_AP) |
253 | ps = &sdata->bss->ps; | 254 | ps = &sdata->bss->ps; |
@@ -273,9 +274,9 @@ static void __ieee80211_wake_txqs(struct ieee80211_sub_if_data *sdata, int ac) | |||
273 | &txqi->flags)) | 274 | &txqi->flags)) |
274 | continue; | 275 | continue; |
275 | 276 | ||
276 | spin_unlock_bh(&fq->lock); | 277 | spin_unlock(&fq->lock); |
277 | drv_wake_tx_queue(local, txqi); | 278 | drv_wake_tx_queue(local, txqi); |
278 | spin_lock_bh(&fq->lock); | 279 | spin_lock(&fq->lock); |
279 | } | 280 | } |
280 | } | 281 | } |
281 | 282 | ||
@@ -288,12 +289,14 @@ static void __ieee80211_wake_txqs(struct ieee80211_sub_if_data *sdata, int ac) | |||
288 | (ps && atomic_read(&ps->num_sta_ps)) || ac != vif->txq->ac) | 289 | (ps && atomic_read(&ps->num_sta_ps)) || ac != vif->txq->ac) |
289 | goto out; | 290 | goto out; |
290 | 291 | ||
291 | spin_unlock_bh(&fq->lock); | 292 | spin_unlock(&fq->lock); |
292 | 293 | ||
293 | drv_wake_tx_queue(local, txqi); | 294 | drv_wake_tx_queue(local, txqi); |
295 | local_bh_enable(); | ||
294 | return; | 296 | return; |
295 | out: | 297 | out: |
296 | spin_unlock_bh(&fq->lock); | 298 | spin_unlock(&fq->lock); |
299 | local_bh_enable(); | ||
297 | } | 300 | } |
298 | 301 | ||
299 | static void | 302 | static void |