From 0174e84b16b0e15ebd9ef7ba7c5138392b723078 Mon Sep 17 00:00:00 2001 From: Konstantin Dorfman Date: Thu, 10 Jan 2019 11:07:46 +0200 Subject: [PATCH] rpmsg: glink: fix destroy channel endpoint logic When rpmsg client driver destroys last channel endpoint, remove rpmsg device is triggered. In both cases (destroy endpoint and remove device) a glink close command sent to the remote peer. This change, when for removing rpmsg device endpoint already destroyed will avoid sending second glink close command. Change-Id: I0135e2626f4ede7a380308944f7c273d18e223bf Signed-off-by: Konstantin Dorfman --- drivers/rpmsg/qcom_glink_native.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c index ddfbf917c61a..5b32f4fdf438 100644 --- a/drivers/rpmsg/qcom_glink_native.c +++ b/drivers/rpmsg/qcom_glink_native.c @@ -1275,6 +1275,10 @@ static void qcom_glink_destroy_ept(struct rpmsg_endpoint *ept) unsigned long flags; spin_lock_irqsave(&channel->recv_lock, flags); + if (!channel->ept.cb) { + spin_unlock_irqrestore(&channel->recv_lock, flags); + return; + } channel->ept.cb = NULL; spin_unlock_irqrestore(&channel->recv_lock, flags);