Browse Source

qcacld-3.0: Donot do SSR if driver is unloading

Issue is triggered as driver/psoc trans both null
in hdd_soc_recovery_reinit. it happens in below
scenario.
1 driver begin unloading
2 fw assert and ssr begin
3 hdd_soc_recovery_shutdown return directly as driver
  trans.
4 checking driver/psoc trans in hdd_soc_recovery_reinit->
  osif_psoc_sync_trans_resume will expose issue.

Fix is to avoid SSR when unloading driver.

Change-Id: Ide520bc8adb4a0fc2bcfaf187905fdd3975cb314
CRs-Fixed: 2782035
Jingxiang Ge 4 years ago
parent
commit
763d089577
1 changed files with 12 additions and 0 deletions
  1. 12 0
      core/hdd/src/wlan_hdd_driver_ops.c

+ 12 - 0
core/hdd/src/wlan_hdd_driver_ops.c

@@ -666,6 +666,12 @@ static int hdd_soc_recovery_reinit(struct device *dev,
 	struct osif_psoc_sync *psoc_sync;
 	int errno;
 
+	/* if driver is unloading, there is no need to do SSR */
+	if (qdf_is_driver_unloading()) {
+		hdd_info("driver is unloading, avoid SSR");
+		return 0;
+	}
+
 	/* SSR transition is initiated at the beginning of soc shutdown */
 	errno = osif_psoc_sync_trans_resume(dev, &psoc_sync);
 	QDF_BUG(!errno);
@@ -902,6 +908,12 @@ static void hdd_soc_recovery_shutdown(struct device *dev)
 	struct osif_psoc_sync *psoc_sync;
 	int errno;
 
+	/* if driver is unloading, there is no need to do SSR */
+	if (qdf_is_driver_unloading()) {
+		hdd_info("driver is unloading, avoid SSR");
+		return;
+	}
+
 	errno = osif_psoc_sync_trans_start_wait(dev, &psoc_sync);
 	if (errno)
 		return;