linux/drivers/rpmsg
Bjorn Andersson c05dfce0b8 rpmsg: glink: Wait for intent, not just request ack
In some implementations of the remote firmware, an intent request
acknowledgment is sent when it's determined if the intent allocation
will be fulfilled, but then the intent is queued after the
acknowledgment.

The result is that upon receiving a granted allocation request, the
search for the newly allocated intent will fail and an additional
request will be made. This will at best waste memory, but if the second
request is rejected the transaction will be incorrectly rejected.

Take the incoming intent into account in the wait to mitigate this
problem.

The above scenario can still happen, in the case that, on that same
channel, an unrelated intent is delivered prior to the request
acknowledgment and a separate process enters the send path and picks up
the intent. Given that there's no relationship between the
acknowledgment and the delivered (or to be delivered intent), there
doesn't seem to be a solution to this problem.

Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
Reviewed-by: Chris Lew <quic_clew@quicinc.com>
[bjorn: Fixed spelling issues pointed out by checkpatch in commit message]
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230327144617.3134175-3-quic_bjorande@quicinc.com
2023-04-19 12:43:19 -07:00
..
Kconfig rpmsg: Move the rpmsg control device from rpmsg_char to rpmsg_ctrl 2022-03-13 11:49:53 -05:00
Makefile rpmsg: Move the rpmsg control device from rpmsg_char to rpmsg_ctrl 2022-03-13 11:49:53 -05:00
mtk_rpmsg.c rpmsg: mtk_rpmsg: Fix circular locking dependency 2022-06-14 16:41:10 -06:00
qcom_glink_native.c rpmsg: glink: Wait for intent, not just request ack 2023-04-19 12:43:19 -07:00
qcom_glink_native.h rpmsg: glink: Fix spelling of peek 2023-02-14 20:28:48 -08:00
qcom_glink_rpm.c rpmsg: qcom_glink_rpm: Convert to platform remove callback returning void 2023-04-05 20:58:32 -07:00
qcom_glink_smem.c rpmsg: glink: Fix spelling of peek 2023-02-14 20:28:48 -08:00
qcom_glink_ssr.c rpmsg: move from strlcpy with unused retval to strscpy 2022-12-28 09:47:41 -06:00
qcom_smd.c rpmsg: qcom_smd: Convert to platform remove callback returning void 2023-04-05 20:58:32 -07:00
rpmsg_char.c rpmsg: char: Add lock to avoid race when rpmsg device is released 2022-12-28 09:54:03 -06:00
rpmsg_char.h rpmsg: char: Export eptdev create and destroy functions 2022-03-13 11:49:53 -05:00
rpmsg_core.c driver core: make struct bus_type.uevent() take a const * 2023-01-27 13:45:52 +01:00
rpmsg_ctrl.c rpmsg: ctrl: Add lock to rpmsg_ctrldev_remove 2022-12-28 09:54:03 -06:00
rpmsg_internal.h rpmsg: Fix parameter naming for announce_create/destroy ops 2022-06-24 10:58:12 -06:00
rpmsg_ns.c rpmsg: Fix calling device_lock() on non-initialized device 2022-05-06 09:51:33 +02:00
virtio_rpmsg_bus.c rpmsg: virtio: Fix the unregistration of the device rpmsg_ctrl 2022-04-26 09:27:15 -06:00