|
@@ -6457,8 +6457,8 @@ tpAniSirGlobal mac_ctx, tSmeCmd *cmd, struct csr_roam_info *roam_info,
|
|
|
|
|
|
QDF_STATUS csr_roam_process_command(tpAniSirGlobal pMac, tSmeCmd *pCommand)
|
|
|
{
|
|
|
- QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
|
struct csr_roam_info roamInfo;
|
|
|
+ QDF_STATUS lock_status, status = QDF_STATUS_SUCCESS;
|
|
|
uint32_t sessionId = pCommand->sessionId;
|
|
|
struct csr_roam_session *pSession = CSR_GET_SESSION(pMac, sessionId);
|
|
|
|
|
@@ -6475,7 +6475,14 @@ QDF_STATUS csr_roam_process_command(tpAniSirGlobal pMac, tSmeCmd *pCommand)
|
|
|
case eCsrForcedDisassoc:
|
|
|
status = csr_roam_process_disassoc_deauth(pMac, pCommand,
|
|
|
true, false);
|
|
|
+ lock_status = sme_acquire_global_lock(&pMac->sme);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(lock_status)) {
|
|
|
+ csr_roam_complete(pMac, eCsrNothingToJoin, NULL,
|
|
|
+ sessionId);
|
|
|
+ return lock_status;
|
|
|
+ }
|
|
|
csr_free_roam_profile(pMac, sessionId);
|
|
|
+ sme_release_global_lock(&pMac->sme);
|
|
|
break;
|
|
|
case eCsrSmeIssuedDisassocForHandoff:
|
|
|
|
|
@@ -6488,12 +6495,26 @@ QDF_STATUS csr_roam_process_command(tpAniSirGlobal pMac, tSmeCmd *pCommand)
|
|
|
case eCsrForcedDisassocMICFailure:
|
|
|
status = csr_roam_process_disassoc_deauth(pMac, pCommand,
|
|
|
true, true);
|
|
|
+ lock_status = sme_acquire_global_lock(&pMac->sme);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(lock_status)) {
|
|
|
+ csr_roam_complete(pMac, eCsrNothingToJoin, NULL,
|
|
|
+ sessionId);
|
|
|
+ return lock_status;
|
|
|
+ }
|
|
|
csr_free_roam_profile(pMac, sessionId);
|
|
|
+ sme_release_global_lock(&pMac->sme);
|
|
|
break;
|
|
|
case eCsrForcedDeauth:
|
|
|
status = csr_roam_process_disassoc_deauth(pMac, pCommand,
|
|
|
false, false);
|
|
|
+ lock_status = sme_acquire_global_lock(&pMac->sme);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(lock_status)) {
|
|
|
+ csr_roam_complete(pMac, eCsrNothingToJoin, NULL,
|
|
|
+ sessionId);
|
|
|
+ return lock_status;
|
|
|
+ }
|
|
|
csr_free_roam_profile(pMac, sessionId);
|
|
|
+ sme_release_global_lock(&pMac->sme);
|
|
|
break;
|
|
|
case eCsrHddIssuedReassocToSameAP:
|
|
|
case eCsrSmeIssuedReassocToSameAP:
|
|
@@ -6553,6 +6574,12 @@ QDF_STATUS csr_roam_process_command(tpAniSirGlobal pMac, tSmeCmd *pCommand)
|
|
|
|
|
|
if (pCommand->u.roamCmd.fUpdateCurRoamProfile) {
|
|
|
|
|
|
+ lock_status = sme_acquire_global_lock(&pMac->sme);
|
|
|
+ if (!QDF_IS_STATUS_SUCCESS(lock_status)) {
|
|
|
+ csr_roam_complete(pMac, eCsrNothingToJoin, NULL,
|
|
|
+ sessionId);
|
|
|
+ return lock_status;
|
|
|
+ }
|
|
|
csr_free_roam_profile(pMac, sessionId);
|
|
|
pSession->pCurRoamProfile =
|
|
|
qdf_mem_malloc(sizeof(struct csr_roam_profile));
|
|
@@ -6561,6 +6588,7 @@ QDF_STATUS csr_roam_process_command(tpAniSirGlobal pMac, tSmeCmd *pCommand)
|
|
|
pSession->pCurRoamProfile,
|
|
|
&pCommand->u.roamCmd.roamProfile);
|
|
|
}
|
|
|
+ sme_release_global_lock(&pMac->sme);
|
|
|
}
|
|
|
|
|
|
* At this point original uapsd_mask is saved in
|