wlan: Invoke panic if SSR never completed
Driver unload should not spin forever, if SSR was never completed invoke
panic after retrying for 30 seconds. Also invoke panic on SSR re-init
failure; invoking panic will help to collect more information on the
SSR failure.
Change-Id: Iaccceae20bd9e9321a9e6b4e13f37d759064d294
CRs-Fixed: 505738
diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index b0eae64..60304fa 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -183,6 +183,8 @@
#define HDD_SAP_WAKE_LOCK_DURATION 10000 //in msecs
+#define HDD_MOD_EXIT_SSR_MAX_RETRIES 30
+
/* Maximum number of interfaces allowed(STA, P2P Device, P2P Interface) */
#define WLAN_MAX_INTERFACES 3
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 8ebb447..0f699ea 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -1731,6 +1731,7 @@
err_re_init:
/* Allow the phone to go to sleep */
hdd_allow_suspend();
+ VOS_BUG(0);
return -EPERM;
success:
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index c02fb76..05b4971 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -6134,6 +6134,7 @@
{
hdd_context_t *pHddCtx = NULL;
v_CONTEXT_t pVosContext = NULL;
+ int retry = 0;
pr_info("%s: unloading driver v%s\n", WLAN_MODULE_NAME, QWLAN_VERSIONSTR);
@@ -6155,11 +6156,18 @@
}
else
{
- /* module exit should never proceed if SSR is not completed */
- while(isWDresetInProgress()){
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL, "%s:SSR in Progress; block rmmod for 1 second!!!",__func__);
+ while(isWDresetInProgress()) {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
+ "%s:SSR in Progress; block rmmod for 1 second!!!", __func__);
msleep(1000);
- }
+
+ if (retry++ == HDD_MOD_EXIT_SSR_MAX_RETRIES) {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_FATAL,
+ "%s:SSR never completed, fatal error", __func__);
+ VOS_BUG(0);
+ }
+ }
+
pHddCtx->isLoadUnloadInProgress = TRUE;
vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, TRUE);
diff --git a/Kbuild b/Kbuild
index 84735b7..f96c63e 100644
--- a/Kbuild
+++ b/Kbuild
@@ -51,7 +51,7 @@
BUILD_DIAG_VERSION := 0
#Do we panic on bug? default is to warn
-PANIC_ON_BUG := 0
+PANIC_ON_BUG := 1
#Re-enable wifi on WDI timeout
RE_ENABLE_WIFI_ON_WDI_TIMEOUT := 0