mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 07:37:31 -04:00
cnss2: Serialize driver load and unload
WLAN driver unload should happen only when it has been probed successfully. So, In driver unload path wait for driver probe to be completed or timed out if it is already in progress. Change-Id: I3359a4286fc36aa9b2abc95c7af3ca2b6dc3a980 Signed-off-by: Sandeep Singh <sandsing@codeaurora.org>
This commit is contained in:
parent
4fbfcf8302
commit
e0ab3312f6
1 changed files with 7 additions and 4 deletions
|
|
@ -1458,6 +1458,7 @@ int cnss_pci_call_driver_probe(struct cnss_pci_data *pci_priv)
|
|||
clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state);
|
||||
clear_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state);
|
||||
set_bit(CNSS_DRIVER_PROBED, &plat_priv->driver_state);
|
||||
complete_all(&plat_priv->power_up_complete);
|
||||
} else if (test_bit(CNSS_DRIVER_IDLE_RESTART,
|
||||
&plat_priv->driver_state)) {
|
||||
ret = pci_priv->driver_ops->idle_restart(pci_priv->pci_dev,
|
||||
|
|
@ -2157,6 +2158,7 @@ int cnss_wlan_register_driver(struct cnss_wlan_driver *driver_ops)
|
|||
}
|
||||
|
||||
register_driver:
|
||||
reinit_completion(&plat_priv->power_up_complete);
|
||||
ret = cnss_driver_event_post(plat_priv,
|
||||
CNSS_DRIVER_EVENT_REGISTER_DRIVER,
|
||||
CNSS_EVENT_SYNC_UNKILLABLE,
|
||||
|
|
@ -2178,19 +2180,20 @@ void cnss_wlan_unregister_driver(struct cnss_wlan_driver *driver_ops)
|
|||
}
|
||||
|
||||
if (plat_priv->device_id == QCA6174_DEVICE_ID ||
|
||||
!test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state))
|
||||
goto skip_wait_idle_restart;
|
||||
!(test_bit(CNSS_DRIVER_IDLE_RESTART, &plat_priv->driver_state) ||
|
||||
test_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state)))
|
||||
goto skip_wait_power_up;
|
||||
|
||||
timeout = cnss_get_qmi_timeout(plat_priv);
|
||||
ret = wait_for_completion_timeout(&plat_priv->power_up_complete,
|
||||
msecs_to_jiffies((timeout << 1) +
|
||||
WLAN_WD_TIMEOUT_MS));
|
||||
if (!ret) {
|
||||
cnss_pr_err("Timeout waiting for idle restart to complete\n");
|
||||
cnss_pr_err("Timeout waiting for driver power up to complete\n");
|
||||
CNSS_ASSERT(0);
|
||||
}
|
||||
|
||||
skip_wait_idle_restart:
|
||||
skip_wait_power_up:
|
||||
if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) &&
|
||||
!test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state))
|
||||
goto skip_wait_recovery;
|
||||
|
|
|
|||
Loading…
Reference in a new issue