summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath10k
diff options
context:
space:
mode:
authorMichal Kazior <michal.kazior@tieto.com>2015-08-07 09:08:21 +0200
committerKalle Valo <kvalo@qca.qualcomm.com>2015-08-17 16:40:25 +0300
commit6d2d51ecfff13f5f6ffc476dccf4d5b2668072eb (patch)
treed54f72510a1012157970e8034e7f9ba9a8941ad2 /drivers/net/wireless/ath/ath10k
parent3a73d1a6f22bf13044056543ad43b2a304ee0022 (diff)
downloadblackbird-op-linux-6d2d51ecfff13f5f6ffc476dccf4d5b2668072eb.tar.gz
blackbird-op-linux-6d2d51ecfff13f5f6ffc476dccf4d5b2668072eb.zip
ath10k: wake up queue upon vif creation
Vif's vdev_id is used as queue number. However due to the tx pausing design in ath10k it was possible for a new interface to be created with its tx queue stopped (via ieee80211_stop_queues). This could in turn leave the interface inoperable until ath10k_mac_tx_unlock() was called. This problem only affected multi-vif scenarios when new interfaces were created some time later after other interfaces have been running for some time and had Tx queue full at some point prior. Possible manifestation of the bug was authentication timeout for a client vif. Fixes: 96d828d45e16 ("ath10k: rework tx queue locking") 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/ath10k')
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index ed2e8b67d95d..3bb9ea8a6903 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -4342,6 +4342,11 @@ static int ath10k_add_interface(struct ieee80211_hw *hw,
}
}
+ spin_lock_bh(&ar->htt.tx_lock);
+ if (!ar->tx_paused)
+ ieee80211_wake_queue(ar->hw, arvif->vdev_id);
+ spin_unlock_bh(&ar->htt.tx_lock);
+
mutex_unlock(&ar->conf_mutex);
return 0;
OpenPOWER on IntegriCloud