소스 검색

qcacld-3.0: Race condition handling for roam during disconnect

Disconnect cmd received from supplicant, at the same time
roam start event received from FW.This results in
conetxt switch in scheduler thread and leads to disconnection in
progress variable could not set. Roam sync events
SIR_ROAMING_DEREGISTER_STA and SIR_ROAM_SYNCH_PROPAGATION are
received one after another. Here again supplicant thread context
resumes resulting in  csr roam profile cleanup.Later on when
scheuler thread resumes back it result in instability while trying
to access roam profile object.

Fix is to add check for current roam state using mlme component.
check for current state is ROAM_RSO_STOPPED during both
SIR_ROAMING_DEREGISTER_STA and SIR_ROAM_SYNCH_PROPAGATION events.

Change-Id: Id0ea18a33dfef3d4e9a4003da33fc7172cf58e85
CRs-Fixed: 2626474
Pankaj Singh 5 년 전
부모
커밋
6c66fc7915
1개의 변경된 파일1개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      core/sme/src/csr/csr_api_roam.c

+ 1 - 0
core/sme/src/csr/csr_api_roam.c

@@ -21191,6 +21191,7 @@ static QDF_STATUS csr_process_roam_sync_callback(struct mac_context *mac_ctx,
 		csr_roam_roaming_offload_timer_action(mac_ctx,
 				0, session_id, ROAMING_OFFLOAD_TIMER_STOP);
 		if (session->discon_in_progress ||
+		    MLME_IS_ROAM_STATE_STOPPED(mac_ctx->psoc, session_id) ||
 		    !CSR_IS_ROAM_JOINED(mac_ctx, session_id)) {
 			QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_DEBUG,
 				FL("LFR3: Session not in connected state or disconnect is in progress %d"),