diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00dev.c')
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index d2a1ea98d0f2..fd356b7c0476 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
| @@ -426,10 +426,14 @@ void rt2x00lib_txdone(struct queue_entry *entry, | |||
| 426 | /* | 426 | /* |
| 427 | * If the data queue was below the threshold before the txdone | 427 | * If the data queue was below the threshold before the txdone |
| 428 | * handler we must make sure the packet queue in the mac80211 stack | 428 | * handler we must make sure the packet queue in the mac80211 stack |
| 429 | * is reenabled when the txdone handler has finished. | 429 | * is reenabled when the txdone handler has finished. This has to be |
| 430 | * serialized with rt2x00mac_tx(), otherwise we can wake up queue | ||
| 431 | * before it was stopped. | ||
| 430 | */ | 432 | */ |
| 433 | spin_lock_bh(&entry->queue->tx_lock); | ||
| 431 | if (!rt2x00queue_threshold(entry->queue)) | 434 | if (!rt2x00queue_threshold(entry->queue)) |
| 432 | rt2x00queue_unpause_queue(entry->queue); | 435 | rt2x00queue_unpause_queue(entry->queue); |
| 436 | spin_unlock_bh(&entry->queue->tx_lock); | ||
| 433 | } | 437 | } |
| 434 | EXPORT_SYMBOL_GPL(rt2x00lib_txdone); | 438 | EXPORT_SYMBOL_GPL(rt2x00lib_txdone); |
| 435 | 439 | ||
