diff --git a/drivers/rpmsg/qcom_glink_native.c b/drivers/rpmsg/qcom_glink_native.c index c5db7f82c9ac..f6c4e25bbf7b 100644 --- a/drivers/rpmsg/qcom_glink_native.c +++ b/drivers/rpmsg/qcom_glink_native.c @@ -187,6 +187,7 @@ struct glink_channel { struct mutex intent_req_lock; bool intent_req_result; struct completion intent_req_comp; + bool channel_ready; }; #define to_glink_channel(_ept) container_of(_ept, struct glink_channel, ept) @@ -822,7 +823,7 @@ static void qcom_glink_handle_intent_req(struct qcom_glink *glink, ept = &channel->ept; intent = qcom_glink_alloc_intent(glink, channel, size, false); - if (intent && ept->cb) + if (intent && channel->channel_ready) qcom_glink_advertise_intent(glink, channel, intent); qcom_glink_send_intent_req_ack(glink, channel, !!intent); @@ -1262,6 +1263,8 @@ static int qcom_glink_announce_create(struct rpmsg_device *rpdev) if (glink->intentless || !completion_done(&channel->open_ack)) return 0; + channel->channel_ready = true; + /*Serve any pending intent request*/ spin_lock_irqsave(&channel->intent_lock, flags); idr_for_each_entry(&channel->liids, tmp, iid) {