cnss2: Avoid IDLE Shutdown during recovery
There can be scenario where CNSS driver receives IDLE shutdown request from WLAN Host driver when SSR/Recovery is in progress. In such case return -EBUSY to Host driver and avoid doing IDLE Shutdown. Change-Id: I68bea49d23e741f405acc1f2c9133cb7452d7952 CRs-Fixed: 3418977
这个提交包含在:
19
cnss2/main.c
19
cnss2/main.c
@@ -1371,8 +1371,6 @@ EXPORT_SYMBOL(cnss_idle_restart);
|
||||
int cnss_idle_shutdown(struct device *dev)
|
||||
{
|
||||
struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);
|
||||
unsigned int timeout;
|
||||
int ret;
|
||||
|
||||
if (!plat_priv) {
|
||||
cnss_pr_err("plat_priv is NULL\n");
|
||||
@@ -1386,21 +1384,12 @@ int cnss_idle_shutdown(struct device *dev)
|
||||
|
||||
cnss_pr_dbg("Doing idle shutdown\n");
|
||||
|
||||
if (!test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) &&
|
||||
!test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state))
|
||||
goto skip_wait;
|
||||
|
||||
reinit_completion(&plat_priv->recovery_complete);
|
||||
timeout = cnss_get_timeout(plat_priv, CNSS_TIMEOUT_RECOVERY);
|
||||
ret = wait_for_completion_timeout(&plat_priv->recovery_complete,
|
||||
msecs_to_jiffies(timeout));
|
||||
if (!ret) {
|
||||
cnss_pr_err("Timeout (%ums) waiting for recovery to complete\n",
|
||||
timeout);
|
||||
CNSS_ASSERT(0);
|
||||
if (test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) ||
|
||||
test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state)) {
|
||||
cnss_pr_dbg("Recovery in progress. Ignore IDLE Shutdown\n");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
skip_wait:
|
||||
return cnss_driver_event_post(plat_priv,
|
||||
CNSS_DRIVER_EVENT_IDLE_SHUTDOWN,
|
||||
CNSS_EVENT_SYNC_UNINTERRUPTIBLE, NULL);
|
||||
|
在新工单中引用
屏蔽一个用户