From d7b5479bb559d492c98266691bd923b0e9053ae6 Mon Sep 17 00:00:00 2001 From: hqu Date: Thu, 9 Apr 2020 15:02:51 +0800 Subject: [PATCH] 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 --- core/sme/src/csr/csr_api_roam.c | 6 +--- core/sme/src/csr/csr_api_scan.c | 47 ------------------------------- core/sme/src/csr/csr_inside_api.h | 2 -- 3 files changed, 1 insertion(+), 54 deletions(-) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index e70663cbac..8673f49cf1 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -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... */ diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c index f5c6bbef64..74bd2a87ae 100644 --- a/core/sme/src/csr/csr_api_scan.c +++ b/core/sme/src/csr/csr_api_scan.c @@ -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) { diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h index 35947fb39c..5b57906162 100644 --- a/core/sme/src/csr/csr_inside_api.h +++ b/core/sme/src/csr/csr_inside_api.h @@ -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 */