diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 8a87ba2bead9..9153848d8d07 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -4457,13 +4457,15 @@ int hdd_vdev_destroy(struct hdd_adapter *adapter) if (adapter->device_mode == QDF_NDI_MODE) hdd_ndp_session_end_handler(adapter); - if (status == QDF_STATUS_E_TIMEOUT) + if (status == QDF_STATUS_E_TIMEOUT) { hdd_err("timed out waiting for sme vdev delete"); - else if (adapter->qdf_session_close_event.force_set) + sme_cleanup_session(hdd_ctx->mac_handle, vdev_id); + } else if (adapter->qdf_session_close_event.force_set) { hdd_info("SSR occurred during sme vdev delete"); - else + } else { hdd_err("failed to wait for sme vdev delete; status:%u", status); + } } release_vdev: diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index cc81e539cff0..2d2cdfc12f05 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -398,6 +398,15 @@ QDF_STATUS sme_create_vdev(mac_handle_t mac_handle, */ QDF_STATUS sme_vdev_delete(mac_handle_t mac_handle, uint8_t vdev_id); +/** + * sme_cleanup_session() - clean up sme session info for vdev + * @mac_handle: mac handle + * @vdev_id: vdev id + * + * Return: none + */ +void sme_cleanup_session(mac_handle_t mac_handle, uint8_t vdev_id); + /** * sme_set_curr_device_mode() - Sets the current operating device mode. * @mac_handle: The handle returned by mac_open. diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 551f411764a7..13cc5ee605ab 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -4562,6 +4562,18 @@ QDF_STATUS sme_vdev_delete(mac_handle_t mac_handle, uint8_t vdev_id) return status; } +void sme_cleanup_session(mac_handle_t mac_handle, uint8_t vdev_id) +{ + QDF_STATUS status; + struct mac_context *mac = MAC_CONTEXT(mac_handle); + + status = sme_acquire_global_lock(&mac->sme); + if (QDF_IS_STATUS_ERROR(status)) + return; + csr_cleanup_session(mac, vdev_id); + sme_release_global_lock(&mac->sme); +} + /* * sme_change_mcc_beacon_interval() - * To update P2P-GO beaconInterval. This function should be called after