| From 37520e9c5072924aa51e144c493019c3d81c9fd3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 24 Jun 2020 22:15:18 +0530 |
| Subject: rpmsg: glink: Use complete_all for open states |
| |
| From: Chris Lew <clew@codeaurora.org> |
| |
| [ Upstream commit 4fcdaf6e28d11e2f3820d54dd23cd12a47ddd44e ] |
| |
| The open_req and open_ack completion variables are the state variables |
| to represet a remote channel as open. Use complete_all so there are no |
| races with waiters and using completion_done. |
| |
| Signed-off-by: Chris Lew <clew@codeaurora.org> |
| Signed-off-by: Arun Kumar Neelakantam <aneela@codeaurora.org> |
| Signed-off-by: Deepak Kumar Singh <deesin@codeaurora.org> |
| Link: https://lore.kernel.org/r/1593017121-7953-2-git-send-email-deesin@codeaurora.org |
| Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/rpmsg/qcom_glink_native.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c |
| index f40312b16da06..b5570c83a28c6 100644 |
| --- a/drivers/rpmsg/qcom_glink_native.c |
| +++ b/drivers/rpmsg/qcom_glink_native.c |
| @@ -970,7 +970,7 @@ static int qcom_glink_rx_open_ack(struct qcom_glink *glink, unsigned int lcid) |
| return -EINVAL; |
| } |
| |
| - complete(&channel->open_ack); |
| + complete_all(&channel->open_ack); |
| |
| return 0; |
| } |
| @@ -1178,7 +1178,7 @@ static int qcom_glink_announce_create(struct rpmsg_device *rpdev) |
| __be32 *val = defaults; |
| int size; |
| |
| - if (glink->intentless) |
| + if (glink->intentless || !completion_done(&channel->open_ack)) |
| return 0; |
| |
| prop = of_find_property(np, "qcom,intents", NULL); |
| @@ -1413,7 +1413,7 @@ static int qcom_glink_rx_open(struct qcom_glink *glink, unsigned int rcid, |
| channel->rcid = ret; |
| spin_unlock_irqrestore(&glink->idr_lock, flags); |
| |
| - complete(&channel->open_req); |
| + complete_all(&channel->open_req); |
| |
| if (create_device) { |
| rpdev = kzalloc(sizeof(*rpdev), GFP_KERNEL); |
| -- |
| 2.27.0 |
| |