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);
 }
 
 /****************************************************************************

Reply via email to