This is an automated email from the ASF dual-hosted git repository. jerpelea pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 3ba04dea7cb8e01e3cb0c3f5abd1b51cddc325e6 Author: Bowen Wang <[email protected]> AuthorDate: Tue Feb 10 22:57:26 2026 +0800 drivers/rpmsg: always take rdev->lock in dump rpmsg_port_dump() and rpmsg_virtio_dump() skipped rdev->lock in interrupt and idle context, because it was a sleeping lock. It is a spinlock now and can be taken there, so take it unconditionally. Signed-off-by: Bowen Wang <[email protected]> --- drivers/rpmsg/rpmsg_port.c | 13 ++----------- drivers/rpmsg/rpmsg_virtio.c | 14 ++------------ 2 files changed, 4 insertions(+), 23 deletions(-) diff --git a/drivers/rpmsg/rpmsg_port.c b/drivers/rpmsg/rpmsg_port.c index 025696840dc..9acba4cdd64 100644 --- a/drivers/rpmsg/rpmsg_port.c +++ b/drivers/rpmsg/rpmsg_port.c @@ -900,14 +900,8 @@ static void rpmsg_port_dump(FAR struct rpmsg_s *rpmsg) { FAR struct rpmsg_port_s *port = (FAR struct rpmsg_port_s *)rpmsg; FAR struct rpmsg_device *rdev = rpmsg_get_rdev_by_rpmsg(rpmsg); - bool needunlock = false; - - if (!up_interrupt_context() && !sched_idletask()) - { - metal_mutex_acquire(&rdev->lock); - needunlock = true; - } + metal_mutex_acquire(&rdev->lock); metal_log(METAL_LOG_EMERGENCY, "Remote: %s state: %d\n", port->rpmsg.cpuname, rpmsg_is_running(rdev)); @@ -916,10 +910,7 @@ static void rpmsg_port_dump(FAR struct rpmsg_s *rpmsg) rpmsg_port_dump_buffer(rdev, &port->rxq, true); rpmsg_port_dump_buffer(rdev, &port->txq, false); - if (needunlock) - { - metal_mutex_release(&rdev->lock); - } + metal_mutex_release(&rdev->lock); if (port->ops->dump) { diff --git a/drivers/rpmsg/rpmsg_virtio.c b/drivers/rpmsg/rpmsg_virtio.c index 60dbbbc6b3d..9f20b0ad0f3 100644 --- a/drivers/rpmsg/rpmsg_virtio.c +++ b/drivers/rpmsg/rpmsg_virtio.c @@ -480,7 +480,6 @@ static void rpmsg_virtio_dump(FAR struct rpmsg_s *rpmsg) (FAR struct rpmsg_virtio_priv_s *)rpmsg; FAR struct rpmsg_virtio_device *rvdev = &priv->rvdev; FAR struct rpmsg_device *rdev = &rvdev->rdev; - bool needunlock = false; metal_log(METAL_LOG_EMERGENCY, "Local: %s Remote: %s Headrx %u Headtx %u\n", @@ -492,13 +491,7 @@ static void rpmsg_virtio_dump(FAR struct rpmsg_s *rpmsg) return; } - if (!up_interrupt_context() && !sched_idletask() && - !metal_mutex_is_acquired(&rdev->lock)) - { - metal_mutex_acquire(&rdev->lock); - needunlock = true; - } - + metal_mutex_acquire(&rdev->lock); metal_log(METAL_LOG_EMERGENCY, "Dump rpmsg info between cpu (master: %s)%s <==> %s:\n", rpmsg_virtio_get_role(rvdev) == RPMSG_HOST ? "yes" : "no", @@ -516,10 +509,7 @@ static void rpmsg_virtio_dump(FAR struct rpmsg_s *rpmsg) rpmsg_virtio_dump_buffer(rvdev, true); rpmsg_virtio_dump_buffer(rvdev, false); - if (needunlock) - { - metal_mutex_release(&rdev->lock); - } + metal_mutex_release(&rdev->lock); } /****************************************************************************
