瀏覽代碼

wil6210: Fix driver down flow

Stations disconnection is executed as part of wil_reset so no
need to do it in wil_down.
Removal of the disconnect operation will also preserve the lock
of wil->mutex during the whole reset flow and prevent handling of
connect event while resetting.
Set wil_status_resetting in earlier stage in the flow to prevent
double resetting call in case communication with FW fails while
bringing the interface down.

Signed-off-by: Lazar Alexei <qca_ailizaro@qca.qualcomm.com>
Signed-off-by: Maya Erez <qca_merez@qca.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Lazar Alexei 9 年之前
父節點
當前提交
b0c0e688e5
共有 1 個文件被更改,包括 2 次插入14 次删除
  1. 2 14
      drivers/net/wireless/ath/wil6210/main.c

+ 2 - 14
drivers/net/wireless/ath/wil6210/main.c

@@ -1035,10 +1035,10 @@ int wil_up(struct wil6210_priv *wil)
 
 
 int __wil_down(struct wil6210_priv *wil)
 int __wil_down(struct wil6210_priv *wil)
 {
 {
-	int rc;
-
 	WARN_ON(!mutex_is_locked(&wil->mutex));
 	WARN_ON(!mutex_is_locked(&wil->mutex));
 
 
+	set_bit(wil_status_resetting, wil->status);
+
 	if (wil->platform_ops.bus_request)
 	if (wil->platform_ops.bus_request)
 		wil->platform_ops.bus_request(wil->platform_handle, 0);
 		wil->platform_ops.bus_request(wil->platform_handle, 0);
 
 
@@ -1064,18 +1064,6 @@ int __wil_down(struct wil6210_priv *wil)
 		wil->scan_request = NULL;
 		wil->scan_request = NULL;
 	}
 	}
 
 
-	if (test_bit(wil_status_fwconnected, wil->status) ||
-	    test_bit(wil_status_fwconnecting, wil->status)) {
-
-		mutex_unlock(&wil->mutex);
-		rc = wmi_call(wil, WMI_DISCONNECT_CMDID, NULL, 0,
-			      WMI_DISCONNECT_EVENTID, NULL, 0,
-			      WIL6210_DISCONNECT_TO_MS);
-		mutex_lock(&wil->mutex);
-		if (rc)
-			wil_err(wil, "timeout waiting for disconnect\n");
-	}
-
 	wil_reset(wil, false);
 	wil_reset(wil, false);
 
 
 	return 0;
 	return 0;