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:
@@ -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... */
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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 */
|
||||
|
Reference in New Issue
Block a user