summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
diff options
context:
space:
mode:
authorSujith <Sujith.Manoharan@atheros.com>2010-03-29 10:37:17 (GMT)
committerJohn W. Linville <linville@tuxdriver.com>2010-03-31 18:46:40 (GMT)
commit7757dfed5809b03aa61c7d7f5ff8092f85df8583 (patch)
treeae855421010956814bca1917dc6e1fb42c3c19ac /drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
parent6335ed0ff8670e6378da41191ab8bda33d1b7ac8 (diff)
downloadlinux-fsl-qoriq-7757dfed5809b03aa61c7d7f5ff8092f85df8583.tar.xz
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.c12
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,