From: Daniel Mack Date: Wed, 23 May 2018 08:14:55 +0000 (+0300) Subject: wcn36xx: drain pending indicator messages on shutdown X-Git-Tag: v4.18-rc1~114^2~67^2^2~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=773f9a28bcdafd6cb77fb1afc545c62746d53990;p=thirdparty%2Fkernel%2Flinux.git wcn36xx: drain pending indicator messages on shutdown When the interface is shut down, wcn36xx_smd_close() potentially races against the queue worker. Make sure to cancel the work, and then free all the remnants in hal_ind_queue manually. This is again just a theoretical issue, not something that was triggered in the wild. Signed-off-by: Daniel Mack Signed-off-by: Kalle Valo --- diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c index ea74f2b92df50..0a505b5e038b0 100644 --- a/drivers/net/wireless/ath/wcn36xx/smd.c +++ b/drivers/net/wireless/ath/wcn36xx/smd.c @@ -2513,5 +2513,11 @@ out: void wcn36xx_smd_close(struct wcn36xx *wcn) { + struct wcn36xx_hal_ind_msg *msg, *tmp; + + cancel_work_sync(&wcn->hal_ind_work); destroy_workqueue(wcn->hal_ind_wq); + + list_for_each_entry_safe(msg, tmp, &wcn->hal_ind_queue, list) + kfree(msg); }