Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dbb6f25a authored by Naman Padhiar's avatar Naman Padhiar Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarNaman Padhiar <npadhiar@codeaurora.org>
parent 610e9488
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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);