summaryrefslogtreecommitdiff
path: root/drivers/net/wireless/ath
diff options
context:
space:
mode:
authorMichal Kazior <michal.kazior@tieto.com>2016-03-17 10:51:04 +0100
committerKalle Valo <kvalo@qca.qualcomm.com>2016-03-21 18:29:16 +0200
commit9d71d47eed20f34620e54e29bcc90f959d5873b8 (patch)
tree1ea5284de2cd3ad950a6c415f922e8398ff4ecad /drivers/net/wireless/ath
parentbf031bc4d6a168029b8a640373fd00837746b47d (diff)
ath10k: fix tx hang
The wake_tx_queue/push_pending logic had a bug which could stop queues indefinitely effectivelly breaking traffic. Fixes: 299468782d94 ("ath10k: implement wake_tx_queue") Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath')
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index eedfe821700b..1bc4bf1916a6 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -3777,13 +3777,13 @@ void ath10k_mac_tx_push_pending(struct ath10k *ar)
}
list_del_init(&artxq->list);
+ if (ret != -ENOENT)
+ list_add_tail(&artxq->list, &ar->txqs);
+
ath10k_htt_tx_txq_update(hw, txq);
- if (artxq == last || (ret < 0 && ret != -ENOENT)) {
- if (ret != -ENOENT)
- list_add_tail(&artxq->list, &ar->txqs);
+ if (artxq == last || (ret < 0 && ret != -ENOENT))
break;
- }
}
rcu_read_unlock();