Skip to content

Commit e8a9186

Browse files
BrainSlayerkvalo
authored andcommitted
ath10k: Fix tx hanging
While running stress tests in roaming scenarios (switching ap's every 5 seconds, we discovered a issue which leads to tx hangings of exactly 5 seconds while or after scanning for new accesspoints. We found out that this hanging is triggered by ath10k_mac_wait_tx_complete since the empty_tx_wq was not wake when the num_tx_pending counter reaches zero. To fix this, we simply move the wake_up call to htt_tx_dec_pending, since this call was missed on several locations within the ath10k code. Signed-off-by: Sebastian Gottschall <[email protected]> Signed-off-by: Kalle Valo <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent dec05cd commit e8a9186

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

drivers/net/wireless/ath/ath10k/htt_tx.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ void ath10k_htt_tx_dec_pending(struct ath10k_htt *htt)
147147
htt->num_pending_tx--;
148148
if (htt->num_pending_tx == htt->max_num_pending_tx - 1)
149149
ath10k_mac_tx_unlock(htt->ar, ATH10K_TX_PAUSE_Q_FULL);
150+
151+
if (htt->num_pending_tx == 0)
152+
wake_up(&htt->empty_tx_wq);
150153
}
151154

152155
int ath10k_htt_tx_inc_pending(struct ath10k_htt *htt)

drivers/net/wireless/ath/ath10k/txrx.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ int ath10k_txrx_tx_unref(struct ath10k_htt *htt,
8282
flags = skb_cb->flags;
8383
ath10k_htt_tx_free_msdu_id(htt, tx_done->msdu_id);
8484
ath10k_htt_tx_dec_pending(htt);
85-
if (htt->num_pending_tx == 0)
86-
wake_up(&htt->empty_tx_wq);
8785
spin_unlock_bh(&htt->tx_lock);
8886

8987
rcu_read_lock();

0 commit comments

Comments
 (0)