wcn36xx: Fix warning due to duplicate scan_completed notification
authorLoic Poulain <loic.poulain@linaro.org>
Thu, 15 Feb 2018 11:08:28 +0000 (12:08 +0100)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 27 Feb 2018 16:48:41 +0000 (18:48 +0200)
The wcn36xx_cancel_hw_scan method stops the hw scan and notify the
scan completion via ieee80211_scan_completed.
However, on scan offload cancellation, firmware sends a scan complete
indication, triggering a new call to ieee80211_scan_completed.
This leads to kernel warn since the scan has already been completed.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/wcn36xx/main.c
drivers/net/wireless/ath/wcn36xx/smd.c

index ab5be6d..fcc98d4 100644 (file)
@@ -666,16 +666,13 @@ static void wcn36xx_cancel_hw_scan(struct ieee80211_hw *hw,
 {
        struct wcn36xx *wcn = hw->priv;
 
-       if (!wcn36xx_smd_stop_hw_scan(wcn)) {
-               struct cfg80211_scan_info scan_info = { .aborted = true };
-
-               ieee80211_scan_completed(wcn->hw, &scan_info);
-       }
-
        mutex_lock(&wcn->scan_lock);
        wcn->scan_aborted = true;
        mutex_unlock(&wcn->scan_lock);
 
+       /* ieee80211_scan_completed will be called on FW scan indication */
+       wcn36xx_smd_stop_hw_scan(wcn);
+
        cancel_work_sync(&wcn->scan_work);
 }
 
index 2a4871c..7cc2928 100644 (file)
@@ -2138,6 +2138,8 @@ static int wcn36xx_smd_hw_scan_ind(struct wcn36xx *wcn, void *buf, size_t len)
        case WCN36XX_HAL_SCAN_IND_COMPLETED:
                mutex_lock(&wcn->scan_lock);
                wcn->scan_req = NULL;
+               if (wcn->scan_aborted)
+                       scan_info.aborted = true;
                mutex_unlock(&wcn->scan_lock);
                ieee80211_scan_completed(wcn->hw, &scan_info);
                break;