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

Commit 3435e5a8 authored by Yue Ma's avatar Yue Ma Committed by Gerrit - the friendly Code Review server
Browse files

cnss2: Avoid double calling MHI force wake put



If MHI force wake get returns failure, it means MHI force wake
put has already been done. Add checks to avoid double calling.

Change-Id: I14f8cef5e6736130e76c287748d7ce3ff0023505
Signed-off-by: default avatarYue Ma <yuem@codeaurora.org>
parent 751529b1
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -493,6 +493,7 @@ int cnss_pci_debug_reg_read(struct cnss_pci_data *pci_priv, u32 offset,
			    u32 *val)
{
	int ret = 0;
	bool do_force_wake_put = true;

	ret = cnss_pci_is_device_down(&pci_priv->pci_dev->dev);
	if (ret)
@@ -502,7 +503,9 @@ int cnss_pci_debug_reg_read(struct cnss_pci_data *pci_priv, u32 offset,
	if (ret < 0)
		goto runtime_pm_put;

	cnss_pci_force_wake_get(pci_priv);
	ret = cnss_pci_force_wake_get(pci_priv);
	if (ret)
		do_force_wake_put = false;

	ret = cnss_pci_reg_read(pci_priv, offset, val);
	if (ret) {
@@ -512,6 +515,7 @@ int cnss_pci_debug_reg_read(struct cnss_pci_data *pci_priv, u32 offset,
	}

force_wake_put:
	if (do_force_wake_put)
		cnss_pci_force_wake_put(pci_priv);
runtime_pm_put:
	cnss_pci_pm_runtime_mark_last_busy(pci_priv);
@@ -524,6 +528,7 @@ int cnss_pci_debug_reg_write(struct cnss_pci_data *pci_priv, u32 offset,
			     u32 val)
{
	int ret = 0;
	bool do_force_wake_put = true;

	ret = cnss_pci_is_device_down(&pci_priv->pci_dev->dev);
	if (ret)
@@ -533,7 +538,9 @@ int cnss_pci_debug_reg_write(struct cnss_pci_data *pci_priv, u32 offset,
	if (ret < 0)
		goto runtime_pm_put;

	cnss_pci_force_wake_get(pci_priv);
	ret = cnss_pci_force_wake_get(pci_priv);
	if (ret)
		do_force_wake_put = false;

	ret = cnss_pci_reg_write(pci_priv, offset, val);
	if (ret) {
@@ -543,6 +550,7 @@ int cnss_pci_debug_reg_write(struct cnss_pci_data *pci_priv, u32 offset,
	}

force_wake_put:
	if (do_force_wake_put)
		cnss_pci_force_wake_put(pci_priv);
runtime_pm_put:
	cnss_pci_pm_runtime_mark_last_busy(pci_priv);
@@ -1474,7 +1482,8 @@ static void cnss_pci_misc_reg_dump(struct cnss_pci_data *pci_priv,
	if (cnss_pci_check_link_status(pci_priv))
		return;

	cnss_pci_force_wake_get(pci_priv);
	if (cnss_pci_force_wake_get(pci_priv))
		return;

	cnss_pr_dbg("start to dump %s registers\n", reg_name);

@@ -1530,6 +1539,7 @@ static void cnss_pci_dump_shadow_reg(struct cnss_pci_data *pci_priv)
{
	int i, j = 0, array_size = SHADOW_REG_COUNT + SHADOW_REG_INTER_COUNT;
	u32 reg_offset;
	bool do_force_wake_put = true;

	if (in_interrupt() || irqs_disabled())
		return;
@@ -1546,7 +1556,7 @@ static void cnss_pci_dump_shadow_reg(struct cnss_pci_data *pci_priv)
	}

	if (cnss_pci_force_wake_get(pci_priv))
		return;
		do_force_wake_put = false;

	cnss_pr_dbg("Start to dump shadow registers\n");

@@ -1567,6 +1577,7 @@ static void cnss_pci_dump_shadow_reg(struct cnss_pci_data *pci_priv)
	}

force_wake_put:
	if (do_force_wake_put)
		cnss_pci_force_wake_put(pci_priv);
}