From df647fac76ab99398484fd66a4052cf210ec4499 Mon Sep 17 00:00:00 2001 From: Andrew Davis Date: Tue, 12 Mar 2024 16:18:07 -0500 Subject: [PATCH] rpmsg_virtio: Move get RX buffer into receive loop This allows us to only need to call rpmsg_virtio_get_rx_buffer() once at the start of the loop and is easier to comprehend. Signed-off-by: Andrew Davis --- lib/rpmsg/rpmsg_virtio.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/rpmsg/rpmsg_virtio.c b/lib/rpmsg/rpmsg_virtio.c index b030b083..786b6259 100644 --- a/lib/rpmsg/rpmsg_virtio.c +++ b/lib/rpmsg/rpmsg_virtio.c @@ -569,14 +569,16 @@ static void rpmsg_virtio_rx_callback(struct virtqueue *vq) uint16_t idx; int status; - metal_mutex_acquire(&rdev->lock); - - /* Process the received data from remote node */ - rp_hdr = rpmsg_virtio_get_rx_buffer(rvdev, &len, &idx); + while (1) { + /* Process the received data from remote node */ + metal_mutex_acquire(&rdev->lock); + rp_hdr = rpmsg_virtio_get_rx_buffer(rvdev, &len, &idx); + metal_mutex_release(&rdev->lock); - metal_mutex_release(&rdev->lock); + /* No more filled rx buffers */ + if (!rp_hdr) + break; - while (rp_hdr) { rp_hdr->reserved = idx; /* Get the channel node from the remote device channels list. */ @@ -605,8 +607,6 @@ static void rpmsg_virtio_rx_callback(struct virtqueue *vq) rpmsg_ept_decref(ept); if (rpmsg_virtio_buf_held_dec_test(rp_hdr)) rpmsg_virtio_release_rx_buffer_nolock(rvdev, rp_hdr); - - rp_hdr = rpmsg_virtio_get_rx_buffer(rvdev, &len, &idx); metal_mutex_release(&rdev->lock); } }