soc: qcom: pmic_glink: use semaphore in pmic_glink_register_client()

Commit 922e045cea2f3 ("soc: qcom: pmic_glink: Fix a race condition
in removing rpmsg device") added a semaphore to protect rpdev
usage when it is added/removed when rpmsg driver is probed/removed
so that clients can use it in pmic_glink_write() concurrently.

When a client tries to register using pmic_glink_register_client()
it checks for the state of pmic_glink device. It's logical to use
the semaphore before reading the state.

Change-Id: Ib715819ea2008f14d204fe097ac1631dbd129e40
Signed-off-by: Subbaraman Narayanamurthy <quic_subbaram@quicinc.com>
This commit is contained in:
Subbaraman Narayanamurthy 2022-08-19 11:27:18 -07:00
parent 3a218c2979
commit b57cad08fb

View File

@ -312,10 +312,13 @@ struct pmic_glink_client *pmic_glink_register_client(struct device *dev,
return ERR_PTR(-ENODEV);
}
down_read(&pgdev->rpdev_sem);
if (!atomic_read(&pgdev->state)) {
up_read(&pgdev->rpdev_sem);
pr_err("pmic_glink is not up\n");
return ERR_PTR(-EPROBE_DEFER);
}
up_read(&pgdev->rpdev_sem);
client = kzalloc(sizeof(*client), GFP_KERNEL);
if (!client)