wlan: Fix misuse of init_completion
calling init_completion instead of INIT_COMPLETION could cause race
condition because init_completion() call does re-inits
not only the variable carrying the flag that the completion finished,
but also initializes the waitqueue associated with the completion.
Change-Id: I6a24214d40c4d19c7ba3cc7f620697552d14bf46
CRs-fixed: 501429
diff --git a/CORE/HDD/src/wlan_hdd_dev_pwr.c b/CORE/HDD/src/wlan_hdd_dev_pwr.c
index 9def5f9..7a4a92e 100644
--- a/CORE/HDD/src/wlan_hdd_dev_pwr.c
+++ b/CORE/HDD/src/wlan_hdd_dev_pwr.c
@@ -143,7 +143,7 @@
*/
VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Suspending Mc, Rx and Tx Threads",__func__);
- init_completion(&pHddCtx->tx_sus_event_var);
+ INIT_COMPLETION(pHddCtx->tx_sus_event_var);
/* Indicate Tx Thread to Suspend */
set_bit(TX_SUSPEND_EVENT_MASK, &vosSchedContext->txEventFlag);
@@ -163,7 +163,7 @@
/* Set the Tx Thread as Suspended */
pHddCtx->isTxThreadSuspended = TRUE;
- init_completion(&pHddCtx->rx_sus_event_var);
+ INIT_COMPLETION(pHddCtx->rx_sus_event_var);
/* Indicate Rx Thread to Suspend */
set_bit(RX_SUSPEND_EVENT_MASK, &vosSchedContext->rxEventFlag);
@@ -191,7 +191,7 @@
/* Set the Rx Thread as Suspended */
pHddCtx->isRxThreadSuspended = TRUE;
- init_completion(&pHddCtx->mc_sus_event_var);
+ INIT_COMPLETION(pHddCtx->mc_sus_event_var);
/* Indicate MC Thread to Suspend */
set_bit(MC_SUSPEND_EVENT_MASK, &vosSchedContext->mcEventFlag);
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index cf2f5b8..2fa29b7 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -3075,6 +3075,7 @@
#endif
init_completion(&pHddCtx->mc_sus_event_var);
init_completion(&pHddCtx->tx_sus_event_var);
+ init_completion(&pHddCtx->rx_sus_event_var);
init_completion(&pAdapter->ula_complete);
pAdapter->isLinkUpSvcNeeded = FALSE;
diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c
index ded3bfc..cff46c4 100644
--- a/CORE/VOSS/src/vos_sched.c
+++ b/CORE/VOSS/src/vos_sched.c
@@ -1121,7 +1121,7 @@
/* Rx Thread Suspended */
complete(&pHddCtx->rx_sus_event_var);
- init_completion(&pSchedContext->ResumeRxEvent);
+ INIT_COMPLETION(pSchedContext->ResumeRxEvent);
spin_unlock(&pSchedContext->RxThreadLock);
/* Wait for Resume Indication */