Hi Arun, On Wed, May 13, 2020 at 10:40:02AM +0530, Arun Kumar Neelakantam wrote: > From: Chris Lew <clew@xxxxxxxxxxxxxx> > > 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 s/represet/represent > races with waiters and using completion_done. > > Signed-off-by: Chris Lew <clew@xxxxxxxxxxxxxx> > Signed-off-by: Arun Kumar Neelakantam <aneela@xxxxxxxxxxxxxx> > --- > drivers/rpmsg/qcom_glink_native.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c > index 1995f5b..604f11f 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); If you do this and as per the note in the comment section above completion_done(), there shouldn't be a need to call completion_done() in qcom_glink_announce_create(). Thanks, Mathieu > > return 0; > } > @@ -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.7.4