Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 997f90a5 authored by Vivek Golani's avatar Vivek Golani
Browse files

rpmsg: qcom_smd: Return error if receive callback is not present



There may be a rx packet on channel while receive callback is
not yet registered. In that case rx packet will be missed and
not delivered to client.

Add check for receive callback. If it is not registered return
-EAGAIN, so that this packet can be retried on next interrupt.

Change-Id: I3371a9faaefe6aa54d0ba4ea5427428932259191
Signed-off-by: default avatarVivek Golani <vgolani@codeaurora.org>
parent d9ce9a59
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -662,6 +662,7 @@ static int qcom_smd_channel_recv_single(struct qcom_smd_channel *channel)
		len = channel->pkt_size;
	}

	if (ept->cb) {
		ret = ept->cb(ept->rpdev, ptr, len, ept->priv, RPMSG_ADDR_ANY);
		if (ret < 0) {
			smd_ipc(channel->edge->ipc, false, NULL,
@@ -669,6 +670,12 @@ static int qcom_smd_channel_recv_single(struct qcom_smd_channel *channel)
								channel->name);
			return ret;
		}
	} else {
		smd_ipc(channel->edge->ipc, false, NULL,
			"%s: Callback not available on channel: %s\n", __func__,
								channel->name);
		return -EAGAIN;
	}

	/* Only forward the tail if the client consumed the data */
	qcom_smd_channel_advance(channel, len);