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: