From dbb6f25a6d5bbfc84a01e44a709eed89028b3cc6 Mon Sep 17 00:00:00 2001 From: Naman Padhiar Date: Mon, 24 May 2021 19:04:44 +0530 Subject: [PATCH] icnss2: Avoid race between SOC wake requests Add check for ref count inside work that if SOC wake request is already sent, increment ref count and return without actually sending request to FW. Change-Id: Ia70e1699001c885b2a76b173ca1106f5555d55ea Signed-off-by: Naman Padhiar --- drivers/soc/qcom/icnss2/main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/soc/qcom/icnss2/main.c b/drivers/soc/qcom/icnss2/main.c index 4e530a852490..0959b5184ddb 100644 --- a/drivers/soc/qcom/icnss2/main.c +++ b/drivers/soc/qcom/icnss2/main.c @@ -850,6 +850,7 @@ static int icnss_driver_event_fw_ready_ind(struct icnss_priv *priv, void *data) set_bit(ICNSS_FW_READY, &priv->state); clear_bit(ICNSS_MODE_ON, &priv->state); + atomic_set(&priv->soc_wake_ref_count, 0); if (priv->device_id == WCN6750_DEVICE_ID) icnss_free_qdss_mem(priv); @@ -1091,6 +1092,12 @@ static int icnss_event_soc_wake_request(struct icnss_priv *priv, void *data) if (!priv) return -ENODEV; + if (atomic_inc_not_zero(&priv->soc_wake_ref_count)) { + icnss_pr_dbg("SOC awake after posting work, Ref count: %d", + atomic_read(&priv->soc_wake_ref_count)); + return 0; + } + ret = wlfw_send_soc_wake_msg(priv, QMI_WLFW_WAKE_REQUEST_V01); if (!ret) atomic_inc(&priv->soc_wake_ref_count);