On 2020-06-18 12:09, Wen Gong wrote:
On 2020-06-17 16:25, Wen Gong wrote:
+
+ skb_queue_tail(&ar->wmi_mgmt_tx_queue, skb);
+ ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
https://patchwork.kernel.org/patch/2947291/
(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5e00d31a0fb74c36f3b174ff0d4914cf09016e6f)
Do you know why this patch used ieee80211_queue_work, not use "struct
workqueue_struct *workqueue" of ath10k?
No one know it?
ieee80211_queue_work is use local->workqueue of ieee80211_hw, if it is
blocked by some function of
mac80211 which is wait some mutex, then the pending worker of the queue
from ath10k will not be
executed again, this is a risk of not using workqueue of ath10k.
I have hit issue about this:
cfg80211_leave called wdev_lock(wdev) to occupy lock, then
ieee80211_sta_rx_queued_mgmt which is running in
local->workqueue of ieee80211_hw acquire the same lock by function
sdata_lock(sdata), then it entered wait state
and the workqueue of ieee80211_hw blocked and all pending worker of it
can not executed.
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k