From b12bd70f6c35b3c6c10900ed4fdcc60be791c312 Mon Sep 17 00:00:00 2001 From: Vignesh Viswanathan Date: Wed, 10 Oct 2018 17:32:06 +0530 Subject: [PATCH] qcacld-3.0: Propagate serialization return status to HDD from CSR Currently only the WLAN_SER_CMD_DENIED_UNSPECIFIED is returned as failure to HDD when a command is posted into serialization from SME/CSR. This can lead to HDD getting a status as success if the command posting failed due to some other reason code in serialization like WLAN_SER_CMD_DENIED_LIST_FULL. Handle all serialization reason codes in csr_queue_sme_command API. Change-Id: Icce5b9f560320b99feb985dead9d06489caa8b5c CRs-Fixed: 2330852 --- core/sme/src/csr/csr_api_roam.c | 37 ++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 51c6722d7bfb..44ea4fa657a4 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -20407,6 +20407,7 @@ QDF_STATUS csr_queue_sme_command(tpAniSirGlobal mac_ctx, tSmeCmd *sme_cmd, { struct wlan_serialization_command cmd; struct wlan_objmgr_vdev *vdev = NULL; + enum wlan_serialization_status ser_cmd_status; QDF_STATUS status; if (!SME_IS_START(mac_ctx)) { @@ -20426,19 +20427,35 @@ QDF_STATUS csr_queue_sme_command(tpAniSirGlobal mac_ctx, tSmeCmd *sme_cmd, qdf_mem_zero(&cmd, sizeof(struct wlan_serialization_command)); status = csr_set_serialization_params_to_cmd(mac_ctx, sme_cmd, &cmd, high_priority); - if (QDF_STATUS_SUCCESS == status) { - vdev = cmd.vdev; - if (WLAN_SER_CMD_DENIED_UNSPECIFIED == - wlan_serialization_request(&cmd)) - status = QDF_STATUS_E_FAILURE; - if (vdev) - wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); - if (status == QDF_STATUS_E_FAILURE) - goto error; - } else { + if (QDF_IS_STATUS_ERROR(status)) { sme_err("failed to set ser params"); goto error; } + + vdev = cmd.vdev; + ser_cmd_status = wlan_serialization_request(&cmd); + sme_debug("wlan_serialization_request status:%d", ser_cmd_status); + + if (vdev) + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); + + switch (ser_cmd_status) { + case WLAN_SER_CMD_PENDING: + case WLAN_SER_CMD_ACTIVE: + /* Command posted to active/pending list */ + status = QDF_STATUS_SUCCESS; + break; + case WLAN_SER_CMD_DENIED_LIST_FULL: + case WLAN_SER_CMD_DENIED_RULES_FAILED: + case WLAN_SER_CMD_DENIED_UNSPECIFIED: + status = QDF_STATUS_E_FAILURE; + goto error; + default: + QDF_ASSERT(0); + status = QDF_STATUS_E_FAILURE; + goto error; + } + return status; error: