summaryrefslogtreecommitdiffstats
path: root/net/mac80211/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/util.c')
-rw-r--r--net/mac80211/util.c13
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;
295out: 297out:
296 spin_unlock_bh(&fq->lock); 298 spin_unlock(&fq->lock);
299 local_bh_enable();
297} 300}
298 301
299static void 302static void