diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index bdec6b50094b..4682bf91b8ed 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -530,7 +530,7 @@ static QDF_STATUS wma_self_peer_remove(tp_wma_handle wma_handle, if (!peer) { WMA_LOGE("%s Failed to find peer %pM", __func__, del_sta_self_req_param->self_mac_addr); - qdf_status = QDF_STATUS_SUCCESS; + qdf_status = QDF_STATUS_E_FAULT; goto error; } wma_remove_peer(wma_handle, @@ -793,8 +793,16 @@ QDF_STATUS wma_vdev_detach(tp_wma_handle wma_handle, if ((status != QDF_STATUS_SUCCESS) && generateRsp) { WMA_LOGE("can't remove selfpeer, send rsp session: %d", vdev_id); - goto send_fail_rsp; - } else { + if (!cds_is_driver_unloading()) { + WMA_LOGE("Trigger recovery for session: %d", + vdev_id); + goto send_fail_rsp; + } else { + WMA_LOGE("driver unload, free mem vdev_id: %d", + vdev_id); + goto send_rsp; + } + } else if (status != QDF_STATUS_SUCCESS) { WMA_LOGE("can't remove selfpeer, free msg session: %d", vdev_id); qdf_mem_free(pdel_sta_self_req_param);