Kaynağa Gözat

qcacld-3.0: Fix SME command stuck issue

If ADD TS is sent it will be an active command in SME till driver gets
resp from peer or timeout. During this phase if LFR3 roam sync event is
received from firmware then PE session cleanup will be done and
SME/CSR is updated with new BSS info. In LIM, 'gLimAddtsSent' flag is
set while processing add tspec request and 'gLimAddtsSent' flag will be
reset once add tspec response received or addts rsp timeout.
This timeout doesn't expire because as part of LFR3 roam sync,
PE delete session is done which stops the timer. Because of this
'gLimAddtsSent' flag is not reset and add tspec response is not sent to
SME, this blocks further SME commands as addts req is not removed from
the active command list. This also blocks PE msg processing as
gLimProcessDefdMsgs is set to FALSE when addts request is sent.
This is not reset as the timer is killed as part of pe delete session.

To address this issue, call lim_process_sme_addts_rsp_timeout()
to reset the 'gLimAddtsSent' flag and send addts rsp timeout to SME.

Change-Id: I7cd1f38fa317bb0a10e22de242aaf42ff62641fd
CRs-Fixed: 1104590
Sreelakshmi Konamki 8 yıl önce
ebeveyn
işleme
f76b407559

+ 12 - 0
core/mac/src/pe/include/lim_api.h

@@ -337,6 +337,18 @@ void lim_process_abort_scan_ind(tpAniSirGlobal pMac, uint8_t sessionId,
 	uint32_t scan_id, uint32_t scan_requestor_id);
 
 void __lim_process_sme_assoc_cnf_new(tpAniSirGlobal, uint32_t, uint32_t *);
+
+/**
+ * lim_process_sme_addts_rsp_timeout(): Send addts rsp timeout to SME
+ * @pMac: Pointer to Global MAC structure
+ * @param: Addts rsp timer count
+ *
+ * This function is used to reset the addts sent flag and
+ * send addts rsp timeout to SME
+ *
+ * Return: None
+ */
+void lim_process_sme_addts_rsp_timeout(tpAniSirGlobal pMac, uint32_t param);
 #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
 void lim_fill_join_rsp_ht_caps(tpPESession session, tpSirSmeJoinRsp rsp);
 #else

+ 4 - 0
core/mac/src/pe/lim/lim_assoc_utils.c

@@ -573,6 +573,10 @@ lim_cleanup_rx_path(tpAniSirGlobal pMac, tpDphHashNode pStaDs,
 			       (pMac, TRACE_CODE_TIMER_DEACTIVATE,
 			       psessionEntry->peSessionId, eLIM_ADDTS_RSP_TIMER));
 		tx_timer_deactivate(&pMac->lim.limTimers.gLimAddtsRspTimer);
+		lim_log(pMac, LOG1,
+			FL("Reset gLimAddtsSent flag and send addts timeout to SME"));
+		lim_process_sme_addts_rsp_timeout(pMac,
+					pMac->lim.gLimAddtsRspTimerCount);
 	}
 
 	if (pStaDs->mlmStaContext.mlmState == eLIM_MLM_WT_ASSOC_CNF_STATE) {

+ 1 - 2
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -3918,8 +3918,7 @@ end:
 			       smesessionId, smetransactionId);
 }
 
-static void lim_process_sme_addts_rsp_timeout(tpAniSirGlobal pMac,
-					      uint32_t param)
+void lim_process_sme_addts_rsp_timeout(tpAniSirGlobal pMac, uint32_t param)
 {
 	/* fetch the sessionEntry based on the sessionId */
 	tpPESession psessionEntry;