diff options
author | Sujith <Sujith.Manoharan@atheros.com> | 2010-03-29 16:07:17 +0530 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-03-31 14:46:40 -0400 |
commit | 7757dfed5809b03aa61c7d7f5ff8092f85df8583 (patch) | |
tree | ae855421010956814bca1917dc6e1fb42c3c19ac /drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | |
parent | 6335ed0ff8670e6378da41191ab8bda33d1b7ac8 (diff) | |
download | kernel_samsung_tuna-7757dfed5809b03aa61c7d7f5ff8092f85df8583.zip kernel_samsung_tuna-7757dfed5809b03aa61c7d7f5ff8092f85df8583.tar.gz kernel_samsung_tuna-7757dfed5809b03aa61c7d7f5ff8092f85df8583.tar.bz2 |
ath9k_htc: Handle TX queue overflow
Stop/restart TX queues when the internal SKB
queue is full. This helps handle TX better
under heavy load.
Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/htc_drv_txrx.c')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c index 8383656..befe574 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c @@ -226,6 +226,18 @@ void ath9k_tx_tasklet(unsigned long data) /* Send status to mac80211 */ ieee80211_tx_status(priv->hw, skb); } + + /* Wake TX queues if needed */ + spin_lock_bh(&priv->tx_lock); + if (priv->tx_queues_stop) { + priv->tx_queues_stop = false; + spin_unlock_bh(&priv->tx_lock); + ath_print(ath9k_hw_common(priv->ah), ATH_DBG_XMIT, + "Waking up TX queues\n"); + ieee80211_wake_queues(priv->hw); + return; + } + spin_unlock_bh(&priv->tx_lock); } void ath9k_htc_txep(void *drv_priv, struct sk_buff *skb, |