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