FTM: Won't process WDI_CLOSE_REQ when unloading
Wait for wdaCompleteEvent failed in wlan_hdd_ftm_start for some
special case, and then it won't process WDI_CLOSE_REQ when
unloading driver, because WLAN DAL state machine in
WDI_STARTED_ST status.
CRs-Fixed: 913906
Change-Id: I6a8e0cefd1670b9f169bbbb91f42d24e72832a3a
diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c
index e7b2c1d..88125f4 100644
--- a/CORE/HDD/src/wlan_hdd_ftm.c
+++ b/CORE/HDD/src/wlan_hdd_ftm.c
@@ -835,12 +835,26 @@
VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) );
}
- vosStatus = WDA_close( vosContext );
- if (!VOS_IS_STATUS_SUCCESS(vosStatus))
+ if ( TRUE == WDA_needShutdown(vosContext))
{
- VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
- "%s: Failed to close WDA %d", __func__, vosStatus);
- VOS_ASSERT( VOS_IS_STATUS_SUCCESS( vosStatus ) );
+ vosStatus = WDA_shutdown(vosContext, VOS_TRUE);
+ if (!VOS_IS_STATUS_SUCCESS(vosStatus))
+ {
+ VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_FATAL,
+ "%s: Failed to shutdown WDA %d", __func__, vosStatus);
+ VOS_ASSERT(VOS_IS_STATUS_SUCCESS(vosStatus));
+ }
+
+ }
+ else
+ {
+ vosStatus = WDA_close(vosContext);
+ if (!VOS_IS_STATUS_SUCCESS(vosStatus))
+ {
+ VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+ "%s: Failed to close WDA %d", __func__, vosStatus);
+ VOS_ASSERT(VOS_IS_STATUS_SUCCESS(vosStatus));
+ }
}
vos_mq_deinit(&((pVosContextType)vosContext)->freeVosMq);
@@ -1773,6 +1787,7 @@
"%s: WDA_NVDownload_Start reporting other error",__func__);
}
VOS_ASSERT(0);
+ WDA_setNeedShutdown(pHddCtx->pvosContext);
goto err_status_failure;
}