mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
qcacld-3.0: Remove roam cmd from sme active list in case of failure
qcacld-2.0 to qcacld-3.0 propagation -In case CSR is already connected and it receives connect with the same profile, csr will silently return and try to send the connect success to HDD. But if roamInfo staId is 0 this roam command is not removed from sme active list and leads to active list timeout. This back to back connect to CSR can happen if HDD and CSR go out of sync and is taken care already. -Also if disconnect is received in case scan for ssid is in progress it will be dropped and roam session state is set to disconnecting. But this roam session state is not reset for the fresh connection and thus if next connect also issue scan for ssid the connect command will be dropped assuming disconnect is in progress. This change removes roam cmd from sme active list in case of above failure and resets roam session state for fresh connections. Also does some cleanup in HDD disconnect command. Change-Id: I222626f1da6bdad83a5264668dde9aafd3dda149 CRs-Fixed: 953196
This commit is contained in:
parent
03f992e41d
commit
acfdc92a12
2 changed files with 21 additions and 5 deletions
|
|
@ -8949,10 +8949,15 @@ int wlan_hdd_disconnect(hdd_adapter_t *pAdapter, u16 reason)
|
|||
|
||||
status = sme_roam_disconnect(WLAN_HDD_GET_HAL_CTX(pAdapter),
|
||||
pAdapter->sessionId, reason);
|
||||
/*
|
||||
* Wait here instead of returning directly, this will block the next
|
||||
* connect command and allow processing of the scan for ssid and
|
||||
* the previous connect command in CSR. Else we might hit some
|
||||
* race conditions leading to SME and HDD out of sync.
|
||||
*/
|
||||
if (CDF_STATUS_CMD_NOT_QUEUED == status) {
|
||||
hddLog(LOG1, FL("status = %d, already disconnected"),
|
||||
(int)status);
|
||||
goto disconnected;
|
||||
} else if (0 != status) {
|
||||
hddLog(LOGE,
|
||||
FL("csr_roam_disconnect failure, returned %d"),
|
||||
|
|
@ -9130,7 +9135,6 @@ static int __wlan_hdd_cfg80211_disconnect(struct wiphy *wiphy,
|
|||
hddLog(LOG1,
|
||||
FL("convert to internal reason %d to reasonCode %d"),
|
||||
reason, reasonCode);
|
||||
pHddStaCtx->conn_info.connState = eConnectionState_NotConnected;
|
||||
pScanInfo = &pAdapter->scan_info;
|
||||
if (pScanInfo->mScanPending) {
|
||||
hddLog(LOG1,
|
||||
|
|
|
|||
|
|
@ -6644,10 +6644,9 @@ static bool csr_roam_process_results(tpAniSirGlobal mac_ctx, tSmeCmd *cmd,
|
|||
roam_info.pbFrames = session->connectedInfo.pbFrames;
|
||||
roam_info.staId = session->connectedInfo.staId;
|
||||
roam_info.u.pConnectedProfile = &session->connectedProfile;
|
||||
if (0 == roam_info.staId) {
|
||||
if (0 == roam_info.staId)
|
||||
CDF_ASSERT(0);
|
||||
return false;
|
||||
}
|
||||
|
||||
session->bRefAssocStartCnt--;
|
||||
csr_roam_call_callback(mac_ctx, session_id, &roam_info,
|
||||
cmd->u.roamCmd.roamId,
|
||||
|
|
@ -7196,6 +7195,19 @@ CDF_STATUS csr_roam_connect(tpAniSirGlobal pMac, uint32_t sessionId,
|
|||
&pSession->connectedProfile.SSID, &pProfile->SSIDs))
|
||||
csr_roam_issue_disassociate_cmd(pMac, sessionId,
|
||||
eCSR_DISCONNECT_REASON_UNSPECIFIED);
|
||||
/*
|
||||
* If roamSession.connectState is disconnecting that mean
|
||||
* disconnect was received with scan for ssid in progress
|
||||
* and dropped. This state will ensure that connect will
|
||||
* not be issued from scan for ssid completion. Thus
|
||||
* if this fresh connect also issue scan for ssid the connect
|
||||
* command will be dropped assuming disconnect is in progress.
|
||||
* Thus reset connectState here
|
||||
*/
|
||||
if (eCSR_ASSOC_STATE_TYPE_INFRA_DISCONNECTING ==
|
||||
pMac->roam.roamSession[sessionId].connectState)
|
||||
pMac->roam.roamSession[sessionId].connectState =
|
||||
eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED;
|
||||
#ifdef FEATURE_WLAN_BTAMP_UT_RF
|
||||
pSession->maxRetryCount = CSR_JOIN_MAX_RETRY_COUNT;
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue