From e8397c272facf7e7f2973d0dbb06214e24eac327 Mon Sep 17 00:00:00 2001 From: Sarada Prasanna Garnayak Date: Thu, 4 May 2017 17:51:10 +0530 Subject: [PATCH] ath10k: cancel the event work in wlan snoc driver module remove The ath10k snoc driver has two work handlers for the qmi event processing and serializations of event processing. These two event work handler must be sync and canceled in driver remove method to avoid module unload and load failure due to the active event work handler during device object memory free. Change-Id: I546c6ba5404e6a26b22b5ef6155e092e279f2c71 Signed-off-by: Sarada Prasanna Garnayak --- drivers/net/wireless/ath/ath10k/qmi.c | 5 +++-- drivers/net/wireless/ath/ath10k/snoc.c | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/ath/ath10k/qmi.c b/drivers/net/wireless/ath/ath10k/qmi.c index 9bab797dcdbc..10223605b027 100644 --- a/drivers/net/wireless/ath/ath10k/qmi.c +++ b/drivers/net/wireless/ath/ath10k/qmi.c @@ -888,12 +888,13 @@ void ath10k_snoc_stop_qmi_service(struct ath10k *ar) ath10k_dbg(ar, ATH10K_DBG_SNOC, "Removing QMI service..\n"); + wake_up_all(&ath10k_fw_ready_wait_event); + cancel_work_sync(&qmi_cfg->event_work); + cancel_work_sync(&qmi_cfg->qmi_recv_msg_work); qmi_svc_event_notifier_unregister(WLFW_SERVICE_ID_V01, WLFW_SERVICE_VERS_V01, WLFW_SERVICE_INS_ID_V01, &qmi_cfg->wlfw_clnt_nb); - - wake_up_all(&ath10k_fw_ready_wait_event); destroy_workqueue(qmi_cfg->event_wq); qmi_cfg = NULL; } diff --git a/drivers/net/wireless/ath/ath10k/snoc.c b/drivers/net/wireless/ath/ath10k/snoc.c index 08618cedf775..0cc98e45b65c 100644 --- a/drivers/net/wireless/ath/ath10k/snoc.c +++ b/drivers/net/wireless/ath/ath10k/snoc.c @@ -1146,8 +1146,10 @@ static int ath10k_snoc_hif_power_up(struct ath10k *ar) if (ar->state == ATH10K_STATE_ON || test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags)) { ret = ath10k_snoc_bus_configure(ar); - if (ret) + if (ret) { ath10k_err(ar, "failed to configure bus: %d\n", ret); + return ret; + } } ret = ath10k_snoc_init_pipes(ar); if (ret) {