wlan: Properly initialize abort scan completion variable.
While posting PNO request to firmware host aborts pending and ongoing
scan requests. As part of abort scan, 'abortscan_event_var' completion
is set while clearing pending list scan commands, leading to post PNO
request before aborting ongoing SCAN request, if present.
Hence initialize abortscan_event_var completion variable only when
SCAN command is present in active list.
Change-Id: Iea90f346e1fa3fbda9e5eca286aa9ad53c57ef2c
CRs-Fixed: 776411.
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 0b85f2b..c064a1f 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -10746,23 +10746,39 @@
hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
hdd_scaninfo_t *pScanInfo = NULL;
long status = 0;
+ tSirAbortScanStatus abortScanStatus;
pScanInfo = &pHddCtx->scan_info;
if (pScanInfo->mScanPending)
{
- INIT_COMPLETION(pScanInfo->abortscan_event_var);
- hdd_abort_mac_scan(pHddCtx, pScanInfo->sessionId,
- eCSR_SCAN_ABORT_DEFAULT);
+ abortScanStatus = hdd_abort_mac_scan(pHddCtx, pScanInfo->sessionId,
+ eCSR_SCAN_ABORT_DEFAULT);
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+ FL("abortScanStatus: %d"), abortScanStatus);
- status = wait_for_completion_interruptible_timeout(
+ /* If there is active scan command lets wait for the completion else
+ * there is no need to wait as scan command might be in the SME pending
+ * command list.
+ */
+ if (abortScanStatus == eSIR_ABORT_ACTIVE_SCAN_LIST_NOT_EMPTY)
+ {
+ INIT_COMPLETION(pScanInfo->abortscan_event_var);
+ status = wait_for_completion_interruptible_timeout(
&pScanInfo->abortscan_event_var,
msecs_to_jiffies(5000));
- if (0 >= status)
- {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ if (0 >= status)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"%s: Timeout or Interrupt occurred while waiting for abort"
"scan, status- %ld", __func__, status);
- return -ETIMEDOUT;
+ return -ETIMEDOUT;
+ }
+ }
+ else if (abortScanStatus == eSIR_ABORT_SCAN_FAILURE)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ FL("hdd_abort_mac_scan failed"));
+ return -VOS_STATUS_E_FAILURE;
}
}
return 0;