diff --git a/wmi/src/wmi_unified.c b/wmi/src/wmi_unified.c index 4107cdd5d8..d009da5170 100644 --- a/wmi/src/wmi_unified.c +++ b/wmi/src/wmi_unified.c @@ -3182,6 +3182,7 @@ void wmi_unified_detach(struct wmi_unified *wmi_handle) &soc->wmi_pdev[i]->event_queue); } + qdf_flush_work(&soc->wmi_pdev[i]->rx_diag_event_work); buf = qdf_nbuf_queue_remove( &soc->wmi_pdev[i]->diag_event_queue); while (buf) { @@ -3253,6 +3254,16 @@ wmi_unified_remove_work(struct wmi_unified *wmi_handle) buf = qdf_nbuf_queue_remove(&wmi_handle->event_queue); } qdf_spin_unlock_bh(&wmi_handle->eventq_lock); + + /* Remove diag events work */ + qdf_flush_work(&wmi_handle->rx_diag_event_work); + qdf_spin_lock_bh(&wmi_handle->diag_eventq_lock); + buf = qdf_nbuf_queue_remove(&wmi_handle->diag_event_queue); + while (buf) { + qdf_nbuf_free(buf); + buf = qdf_nbuf_queue_remove(&wmi_handle->diag_event_queue); + } + qdf_spin_unlock_bh(&wmi_handle->diag_eventq_lock); } /**