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
这个提交包含在:
Naman Padhiar
2023-03-01 15:28:21 +05:30
提交者 Madan Koyyalamudi
父节点 f6f7707351
当前提交 97d02063a9

查看文件

@@ -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);