Sfoglia il codice sorgente

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 anni fa
parent
commit
6c66fc7915
1 ha cambiato i file con 1 aggiunte e 0 eliminazioni
  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"),