Commit 9501bc2b authored by Wen Gong's avatar Wen Gong Committed by Kalle Valo

ath10k: cancel rx worker in hif_stop for SDIO

The rx worker of SDIO should be cancelled after disable interrupt, and
release rx sk_buff in queue, otherwise the rx worker maybe still run
after hif_stop. And it should be cancelled before napi_synchronize in
hif_stop, because the rx worker of SDIO will call napi_schedule, it
should have no napi_schedule before napi_synchronize, otherwise it
lead napi_synchronize wait untill napi_complete.

Tested-on: QCA6174 hw3.2 SDIO WLAN.RMH.4.4.1-00049
Signed-off-by: default avatarWen Gong <wgong@codeaurora.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/1604558036-4056-1-git-send-email-wgong@codeaurora.org
parent ee06fcb9
...@@ -1962,9 +1962,15 @@ static void ath10k_sdio_hif_stop(struct ath10k *ar) ...@@ -1962,9 +1962,15 @@ static void ath10k_sdio_hif_stop(struct ath10k *ar)
{ {
struct ath10k_sdio_bus_request *req, *tmp_req; struct ath10k_sdio_bus_request *req, *tmp_req;
struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar);
struct sk_buff *skb;
ath10k_sdio_irq_disable(ar); ath10k_sdio_irq_disable(ar);
cancel_work_sync(&ar_sdio->async_work_rx);
while ((skb = skb_dequeue(&ar_sdio->rx_head)))
dev_kfree_skb_any(skb);
cancel_work_sync(&ar_sdio->wr_async_work); cancel_work_sync(&ar_sdio->wr_async_work);
spin_lock_bh(&ar_sdio->wr_async_lock); spin_lock_bh(&ar_sdio->wr_async_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment