From b0dd6905666247ae13dd7c28f1762f6d93264da8 Mon Sep 17 00:00:00 2001 From: Yue Ma Date: Thu, 19 Mar 2020 12:26:04 -0700 Subject: [PATCH] cnss2: Avoid blocking target to reboot or shutdown Use wait_for_completion_killable() instead of wait_for_completion() to avold blocking target to reboot or shutdown during WLAN device power on/off. Change-Id: If60848fe9d61e506347e3c6b0fe8c8604cee6c79 Signed-off-by: Yue Ma --- drivers/net/wireless/cnss2/main.c | 6 +++++- drivers/net/wireless/cnss2/main.h | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index 6280a8f56780..9d22e9c1ca4c 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -520,8 +520,10 @@ int cnss_driver_event_post(struct cnss_plat_data *plat_priv, if (!(flags & CNSS_EVENT_SYNC)) goto out; - if (flags & CNSS_EVENT_UNINTERRUPTIBLE) + if (flags & CNSS_EVENT_UNKILLABLE) wait_for_completion(&event->complete); + else if (flags & CNSS_EVENT_UNINTERRUPTIBLE) + ret = wait_for_completion_killable(&event->complete); else ret = wait_for_completion_interruptible(&event->complete); @@ -2081,6 +2083,8 @@ static int cnss_reboot_notifier(struct notifier_block *nb, container_of(nb, struct cnss_plat_data, reboot_nb); set_bit(CNSS_IN_REBOOT, &plat_priv->driver_state); + del_timer(&plat_priv->fw_boot_timer); + complete_all(&plat_priv->power_up_complete); cnss_pr_dbg("Reboot is in progress with action %d\n", action); return NOTIFY_DONE; diff --git a/drivers/net/wireless/cnss2/main.h b/drivers/net/wireless/cnss2/main.h index 8cd6c16ca594..c1fac9e0b05d 100644 --- a/drivers/net/wireless/cnss2/main.h +++ b/drivers/net/wireless/cnss2/main.h @@ -31,8 +31,10 @@ #define CNSS_EVENT_SYNC BIT(0) #define CNSS_EVENT_UNINTERRUPTIBLE BIT(1) +#define CNSS_EVENT_UNKILLABLE BIT(2) #define CNSS_EVENT_SYNC_UNINTERRUPTIBLE (CNSS_EVENT_SYNC | \ CNSS_EVENT_UNINTERRUPTIBLE) +#define CNSS_EVENT_SYNC_UNKILLABLE (CNSS_EVENT_SYNC | CNSS_EVENT_UNKILLABLE) enum cnss_dev_bus_type { CNSS_BUS_NONE = -1,