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

Reply via email to