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>
This commit is contained in:
parent
d35c2b6f8f
commit
b0c0e688e5
|
@ -1035,10 +1035,10 @@ int wil_up(struct wil6210_priv *wil)
|
|||
|
||||
int __wil_down(struct wil6210_priv *wil)
|
||||
{
|
||||
int rc;
|
||||
|
||||
WARN_ON(!mutex_is_locked(&wil->mutex));
|
||||
|
||||
set_bit(wil_status_resetting, wil->status);
|
||||
|
||||
if (wil->platform_ops.bus_request)
|
||||
wil->platform_ops.bus_request(wil->platform_handle, 0);
|
||||
|
||||
|
@ -1064,18 +1064,6 @@ int __wil_down(struct wil6210_priv *wil)
|
|||
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);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue