diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 6e041d61ae..64fb270a8b 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -1647,6 +1647,42 @@ static void wma_init_max_no_of_peers(tp_wma_handle wma_handle, cfg->max_no_of_peers = max_peers; } +/** + * wma_cleanup_vdev_resp_queue() - cleanup vdev response queue + * @wma: wma handle + * + * Return: none + */ +static void wma_cleanup_vdev_resp_queue(tp_wma_handle wma) +{ + struct wma_target_req *req_msg = NULL; + qdf_list_node_t *node1 = NULL; + QDF_STATUS status; + + qdf_spin_lock_bh(&wma->vdev_respq_lock); + if (!qdf_list_size(&wma->vdev_resp_queue)) { + qdf_spin_unlock_bh(&wma->vdev_respq_lock); + WMA_LOGI(FL("request queue maybe empty")); + return; + } + + while (qdf_list_peek_front(&wma->vdev_resp_queue, &node1) != + QDF_STATUS_SUCCESS) { + req_msg = qdf_container_of(node1, struct wma_target_req, node); + status = qdf_list_remove_node(&wma->vdev_resp_queue, node1); + qdf_spin_unlock_bh(&wma->vdev_respq_lock); + if (status != QDF_STATUS_SUCCESS) { + WMA_LOGE(FL("Failed to remove req vdev_id %d type %d"), + req_msg->vdev_id, req_msg->type); + return; + } + qdf_mc_timer_destroy(&req_msg->event_timeout); + qdf_mem_free(req_msg); + qdf_spin_lock_bh(&wma->vdev_respq_lock); + } + qdf_spin_unlock_bh(&wma->vdev_respq_lock); +} + /** * wma_shutdown_notifier_cb - Shutdown notifer call back * @priv : WMA handle @@ -1664,6 +1700,7 @@ static void wma_shutdown_notifier_cb(void *priv) tp_wma_handle wma_handle = priv; qdf_event_set(&wma_handle->wma_resume_event); + wma_cleanup_vdev_resp_queue(wma_handle); } struct wma_version_info g_wmi_version_info; @@ -3293,41 +3330,6 @@ static void wma_cleanup_hold_req(tp_wma_handle wma) qdf_spin_unlock_bh(&wma->wma_hold_req_q_lock); } -/** - * wma_cleanup_vdev_resp() - cleanup vdev response queue - * @wma: wma handle - * - * Return: none - */ -static void wma_cleanup_vdev_resp(tp_wma_handle wma) -{ - struct wma_target_req *req_msg = NULL; - qdf_list_node_t *node1 = NULL; - QDF_STATUS status; - - qdf_spin_lock_bh(&wma->vdev_respq_lock); - if (!qdf_list_size(&wma->vdev_resp_queue)) { - qdf_spin_unlock_bh(&wma->vdev_respq_lock); - WMA_LOGI(FL("request queue maybe empty")); - return; - } - - while (QDF_STATUS_SUCCESS != qdf_list_peek_front(&wma->vdev_resp_queue, - &node1)) { - req_msg = qdf_container_of(node1, struct wma_target_req, node); - status = qdf_list_remove_node(&wma->vdev_resp_queue, node1); - if (QDF_STATUS_SUCCESS != status) { - qdf_spin_unlock_bh(&wma->vdev_respq_lock); - WMA_LOGE(FL("Failed to remove request for vdev_id %d type %d"), - req_msg->vdev_id, req_msg->type); - return; - } - qdf_mc_timer_destroy(&req_msg->event_timeout); - qdf_mem_free(req_msg); - } - qdf_spin_unlock_bh(&wma->vdev_respq_lock); -} - /** * wma_wmi_service_close() - close wma wmi service interface. * @cds_ctx: cds context @@ -3547,7 +3549,7 @@ QDF_STATUS wma_close(void *cds_ctx) qdf_event_destroy(&wma_handle->recovery_event); qdf_event_destroy(&wma_handle->tx_frm_download_comp_event); qdf_event_destroy(&wma_handle->tx_queue_empty_event); - wma_cleanup_vdev_resp(wma_handle); + wma_cleanup_vdev_resp_queue(wma_handle); wma_cleanup_hold_req(wma_handle); qdf_wake_lock_destroy(&wma_handle->wmi_cmd_rsp_wake_lock); qdf_runtime_lock_deinit(wma_handle->wmi_cmd_rsp_runtime_lock);