This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 16763e4c67cf70e7a003d604e53d8c573bf4062c Author: Bowen Wang <[email protected]> AuthorDate: Fri Jan 24 00:41:28 2025 +0800 drivers/rpmsg_port: support release the rx buffer in ept->cb Now we can release the rx buffer in ept->cb, ept->cb should copy the rx buffer it's private buffer and then return RPMSG_SUCCESS_BUFFER_RETURNED. Signed-off-by: Bowen Wang <[email protected]> --- drivers/rpmsg/rpmsg_port.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/rpmsg/rpmsg_port.c b/drivers/rpmsg/rpmsg_port.c index b99a1e8e66a..2147808f477 100644 --- a/drivers/rpmsg/rpmsg_port.c +++ b/drivers/rpmsg/rpmsg_port.c @@ -406,7 +406,7 @@ static void rpmsg_port_rx_callback(FAR struct rpmsg_port_s *port, FAR struct rpmsg_hdr *rphdr = (FAR struct rpmsg_hdr *)hdr->buf; FAR void *data = RPMSG_LOCATE_DATA(rphdr); FAR struct rpmsg_endpoint *ept; - int status; + int status = 0; metal_mutex_acquire(&rdev->lock); ept = rpmsg_get_ept_from_addr(rdev, rphdr->dst); @@ -422,13 +422,17 @@ static void rpmsg_port_rx_callback(FAR struct rpmsg_port_s *port, } status = ept->cb(ept, data, rphdr->len, rphdr->src, ept->priv); - if (status < 0) + if (status < 0 && status != RPMSG_SUCCESS_BUFFER_RELEASED) { RPMSG_ASSERT(0, "unexpected callback status\n"); } } - rpmsg_port_release_rx_buffer(rdev, data); + if (status != RPMSG_SUCCESS_BUFFER_RELEASED) + { + rpmsg_port_release_rx_buffer(rdev, data); + } + metal_mutex_acquire(&rdev->lock); rpmsg_ept_decref(ept); metal_mutex_release(&rdev->lock);
