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

Commit 4fea29cc authored by Prudhvi Yarlagadda's avatar Prudhvi Yarlagadda Committed by Gerrit - the friendly Code Review server
Browse files

slim-msm-ngd: Prevent race condition for suspend and SSR



Prevents the possible race condition between slimbus suspend
and slimbus SSR function execution. When SSR callback function
takes mutex lock ahead of suspend function, it results in qmi
NULL pointer dereference in suspend function as SSR function
execution makes it NULL.

Change-Id: I87ed0ecaeda9627552b6061f6b135740da067774
Signed-off-by: default avatarPrudhvi Yarlagadda <pyarlaga@codeaurora.org>
parent 8952c855
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
/* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
/* Copyright (c) 2011-2019, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -2098,7 +2098,18 @@ static int ngd_slim_runtime_suspend(struct device *device)
	int ret = 0;

	mutex_lock(&dev->tx_lock);
	if (dev->qmi.handle != NULL) {
		ret = ngd_slim_power_down(dev);
	} else {
		if (dev->state == MSM_CTRL_DOWN)
			SLIM_INFO(dev, "SB rt suspend in SSR: %d\n",
								dev->state);
		else
			SLIM_INFO(dev, "SB rt suspend bad state: %d\n",
								dev->state);
		mutex_unlock(&dev->tx_lock);
		return ret;
	}
	if (ret && ret != -EBUSY)
		SLIM_INFO(dev, "slim resource not idle:%d\n", ret);
	if (!ret || ret == -ETIMEDOUT)