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: Wen Gong <wgong@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/1604558036-4056-1-git-send-email-wgong@codeaurora.org
This commit is contained in:
parent
ee06fcb98d
commit
9501bc2b16
@ -1962,9 +1962,15 @@ static void ath10k_sdio_hif_stop(struct ath10k *ar)
|
||||
{
|
||||
struct ath10k_sdio_bus_request *req, *tmp_req;
|
||||
struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar);
|
||||
struct sk_buff *skb;
|
||||
|
||||
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);
|
||||
|
||||
spin_lock_bh(&ar_sdio->wr_async_lock);
|
||||
|
Loading…
x
Reference in New Issue
Block a user