qcacld-3.0: Don't remove pending cmd when NB disconnect complete

In case eCsrForcedDeauthSta from NB is completed, eWNI_SME_DEAUTH_RSP
will remove all pending eSmeCommandWmStatusChange type commands from
serialization, this will cause other peers which deauth request is
from SB are not deleted from LIM and remain in deleting progress.

Fix is to don't remove pending eSmeCommandWmStatusChange type
commands when NB disconnect complete from eWNI_SME_DEAUTH_RSP.

Change-Id: I8e2248463fb7fd97343d411d46b1cae08dc4cb25
CRs-Fixed: 2652486
This commit is contained in:
hqu
2020-04-09 15:02:51 +08:00
committed by nshrivas
parent 8bd2a26851
commit d7b5479bb5
3 changed files with 1 additions and 54 deletions

View File

@@ -10643,13 +10643,9 @@ void csr_roaming_state_msg_processor(struct mac_context *mac, void *msg_buf)
break;
case eWNI_SME_DEAUTH_RSP:
/* or the Deauthentication response message... */
if (CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ(mac, pSmeRsp->vdev_id)) {
csr_remove_nonscan_cmd_from_pending_list(mac,
pSmeRsp->vdev_id,
eSmeCommandWmStatusChange);
if (CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ(mac, pSmeRsp->vdev_id))
csr_roam_roaming_state_deauth_rsp_processor(mac,
(struct deauth_rsp *) pSmeRsp);
}
break;
case eWNI_SME_START_BSS_RSP:
/* or the Start BSS response message... */

View File

@@ -1686,53 +1686,6 @@ QDF_STATUS csr_scan_abort_mac_scan(struct mac_context *mac_ctx,
return status;
}
QDF_STATUS csr_remove_nonscan_cmd_from_pending_list(struct mac_context *mac,
uint8_t vdev_id,
eSmeCommandType commandType)
{
tDblLinkList localList;
tListElem *pEntry;
tSmeCmd *pCommand;
tListElem *pEntryToRemove;
QDF_STATUS status = QDF_STATUS_E_FAILURE;
qdf_mem_zero(&localList, sizeof(tDblLinkList));
if (!QDF_IS_STATUS_SUCCESS(csr_ll_open(&localList))) {
sme_err("failed to open list");
return status;
}
pEntry = csr_nonscan_pending_ll_peek_head(mac, LL_ACCESS_NOLOCK);
/*
* Have to make sure we don't loop back to the head of the list,
* which will happen if the entry is NOT on the list
*/
while (pEntry) {
pEntryToRemove = pEntry;
pEntry = csr_nonscan_pending_ll_next(mac,
pEntry, LL_ACCESS_NOLOCK);
pCommand = GET_BASE_ADDR(pEntryToRemove, tSmeCmd, Link);
if ((pCommand->command == commandType) &&
(pCommand->vdev_id == vdev_id)) {
/* Insert to localList and remove later */
csr_ll_insert_tail(&localList, pEntryToRemove,
LL_ACCESS_NOLOCK);
status = QDF_STATUS_SUCCESS;
}
}
while ((pEntry = csr_ll_remove_head(&localList, LL_ACCESS_NOLOCK))) {
pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link);
sme_debug("Sending abort for command ID %d", vdev_id);
csr_release_command(mac, pCommand);
}
csr_ll_close(&localList);
return status;
}
bool csr_roam_is_valid_channel(struct mac_context *mac, uint32_t ch_freq)
{

View File

@@ -166,8 +166,6 @@ QDF_STATUS csr_scan_for_ssid(struct mac_context *mac, uint32_t sessionId,
*/
QDF_STATUS csr_scan_abort_mac_scan(struct mac_context *mac, uint32_t vdev_id,
uint32_t scan_id);
QDF_STATUS csr_remove_nonscan_cmd_from_pending_list(struct mac_context *mac,
uint8_t sessionId, eSmeCommandType commandType);
/* If fForce is true we will save the new String that is learn't. */
/* Typically it will be true in case of Join or user initiated ioctl */