qcacld-3.0: Do not trigger del sta if it is already in progress
qcacld-2.0 to qcacld-3.0 propagation If SAP receive auth from an already connected STA, it post eWNI_SME_DISASSOC_IND msg to SME to delete the STA context and return. STA may try to send auth again as it didnt receive auth resp. Now many frames (probe req, auth etc) may get accumulated in PE message queue and unless PE queue is fully processed SME queue will not be processed and thus del sta will get delayed. This may again cause STA to send more auth req and every time MC thread process an auth req before the sta is deleted, eWNI_SME_DISASSOC_IND msg is posted in SME message queue. And if PE keeps on getting auth before the sta is deleted, SME queue will pile up leading to crash. To fix this do not trigger del sta if it is already in progress. Change-Id: Icff3778d35ef7ea646463fe49c4335e260e9e156 CRs-Fixed: 982329
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

父節點
c994160fb0
當前提交
440450989a
@@ -282,6 +282,7 @@ tpDphHashNode dph_init_sta_state(tpAniSirGlobal pMac, tSirMacAddr staAddr,
|
||||
#ifdef WLAN_FEATURE_11W
|
||||
pStaDs->last_assoc_received_time = 0;
|
||||
#endif
|
||||
pStaDs->sta_deletion_in_progress = false;
|
||||
pStaDs->valid = 1;
|
||||
return pStaDs;
|
||||
}
|
||||
@@ -424,6 +425,7 @@ tSirRetStatus dph_delete_hash_entry(tpAniSirGlobal pMac, tSirMacAddr staAddr,
|
||||
#ifdef WLAN_FEATURE_11W
|
||||
ptr->last_assoc_received_time = 0;
|
||||
#endif
|
||||
ptr->sta_deletion_in_progress = false;
|
||||
ptr->next = 0;
|
||||
} else {
|
||||
/* / Entry not present */
|
||||
|
@@ -241,6 +241,7 @@ typedef struct sDphHashNode {
|
||||
|
||||
uint8_t nss;
|
||||
int8_t del_sta_ctx_rssi;
|
||||
bool sta_deletion_in_progress;
|
||||
|
||||
/*
|
||||
* When a station with already an existing dph entry tries to
|
||||
|
@@ -290,13 +290,16 @@ lim_trigger_sta_deletion(tpAniSirGlobal mac_ctx, tpDphHashNode sta_ds,
|
||||
|
||||
if ((sta_ds->mlmStaContext.mlmState == eLIM_MLM_WT_DEL_STA_RSP_STATE) ||
|
||||
(sta_ds->mlmStaContext.mlmState ==
|
||||
eLIM_MLM_WT_DEL_BSS_RSP_STATE)) {
|
||||
eLIM_MLM_WT_DEL_BSS_RSP_STATE) ||
|
||||
sta_ds->sta_deletion_in_progress) {
|
||||
/* Already in the process of deleting context for the peer */
|
||||
lim_log(mac_ctx, LOGE,
|
||||
FL("Deletion is in progress for peer:%pM"),
|
||||
sta_ds->staAddr);
|
||||
lim_log(mac_ctx, LOG1,
|
||||
FL("Deletion is in progress (%d) for peer:%p in mlmState %d"),
|
||||
sta_ds->sta_deletion_in_progress, sta_ds->staAddr,
|
||||
sta_ds->mlmStaContext.mlmState);
|
||||
return;
|
||||
}
|
||||
sta_ds->sta_deletion_in_progress = true;
|
||||
|
||||
sta_ds->mlmStaContext.disassocReason =
|
||||
eSIR_MAC_DISASSOC_DUE_TO_INACTIVITY_REASON;
|
||||
|
Reference in New Issue
Block a user