This is an automated email from the ASF dual-hosted git repository.

casaroli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new c66c1226bdd drivers/rpmsg: share the endpoint list dump between the 
transports
c66c1226bdd is described below

commit c66c1226bdd7a3bd35eb7da50bc63432944fe717
Author: Yongrong Wang <[email protected]>
AuthorDate: Mon Nov 2 19:41:06 2026 +0800

    drivers/rpmsg: share the endpoint list dump between the transports
    
    rpmsg_virtio, rpmsg_virtio_lite and rpmsg_port each walked the endpoint
    list in their dump op to print only the endpoint names. Move that walk
    into rpmsg_dump_epts() and also print each endpoint's address, peer
    address, reference count, priority and private data, which is what is
    needed to tell a stuck or leaked endpoint apart from a healthy one.
    
    Signed-off-by: Yongrong Wang <[email protected]>
    Signed-off-by: Bowen Wang <[email protected]>
---
 drivers/rpmsg/rpmsg.c             | 22 ++++++++++++++++++++++
 drivers/rpmsg/rpmsg.h             |  1 +
 drivers/rpmsg/rpmsg_port.c        |  8 +-------
 drivers/rpmsg/rpmsg_virtio.c      | 10 +---------
 drivers/rpmsg/rpmsg_virtio_lite.c | 10 +---------
 5 files changed, 26 insertions(+), 25 deletions(-)

diff --git a/drivers/rpmsg/rpmsg.c b/drivers/rpmsg/rpmsg.c
index 35621015f9f..492fcad427d 100644
--- a/drivers/rpmsg/rpmsg.c
+++ b/drivers/rpmsg/rpmsg.c
@@ -26,6 +26,8 @@
 
 #include <nuttx/config.h>
 
+#include <inttypes.h>
+
 #include <metal/sys.h>
 #include <nuttx/kmalloc.h>
 #include <nuttx/mutex.h>
@@ -561,6 +563,26 @@ void rpmsg_unregister(FAR const char *path, FAR struct 
rpmsg_s *rpmsg)
   metal_finish();
 }
 
+/****************************************************************************
+ * Name: rpmsg_dump_epts
+ ****************************************************************************/
+
+void rpmsg_dump_epts(FAR struct rpmsg_device *rdev)
+{
+  FAR struct rpmsg_endpoint *ept;
+  FAR struct metal_list *node;
+
+  metal_log(METAL_LOG_EMERGENCY, "  rpmsg ept list:\n");
+  metal_list_for_each(&rdev->endpoints, node)
+    {
+      ept = metal_container_of(node, struct rpmsg_endpoint, node);
+      metal_log(METAL_LOG_EMERGENCY, "    ept %s %p: addr=%" PRIu32 " "
+                "dest=%" PRIu32 " refcnt=%" PRIu32 " priority=%" PRIu8
+                " priv=%p\n", ept->name, ept, ept->addr, ept->dest_addr,
+                ept->refcnt, ept->priority, ept->priv);
+    }
+}
+
 static int rpmsg_ioctl_foreach_cb(FAR struct rpmsg_s *rpmsg, FAR void *arg)
 {
   FAR struct rpmsg_ioctl_s *info = (FAR struct rpmsg_ioctl_s *)arg;
diff --git a/drivers/rpmsg/rpmsg.h b/drivers/rpmsg/rpmsg.h
index a93f5255526..acfc26c0676 100644
--- a/drivers/rpmsg/rpmsg.h
+++ b/drivers/rpmsg/rpmsg.h
@@ -105,6 +105,7 @@ int rpmsg_register(FAR const char *path, FAR struct rpmsg_s 
*rpmsg,
 void rpmsg_unregister(FAR const char *path, FAR struct rpmsg_s *rpmsg);
 
 int rpmsg_foreach(rpmsg_foreach_t handler, FAR void *args);
+void rpmsg_dump_epts(FAR struct rpmsg_device *rdev);
 
 #endif /* CONFIG_RPMSG */
 #endif /* __DRIVERS_RPMSG_RPMSG_H */
diff --git a/drivers/rpmsg/rpmsg_port.c b/drivers/rpmsg/rpmsg_port.c
index 5c9acb557ec..fa139ee077d 100644
--- a/drivers/rpmsg/rpmsg_port.c
+++ b/drivers/rpmsg/rpmsg_port.c
@@ -884,8 +884,6 @@ 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);
-  FAR struct rpmsg_endpoint *ept;
-  FAR struct metal_list *node;
   bool needunlock = false;
 
   if (!up_interrupt_context() && !sched_idletask())
@@ -897,11 +895,7 @@ static void rpmsg_port_dump(FAR struct rpmsg_s *rpmsg)
   metal_log(METAL_LOG_EMERGENCY, "Remote: %s state: %d\n",
             port->rpmsg.cpuname, rpmsg_is_running(rdev));
 
-  metal_list_for_each(&rdev->endpoints, node)
-    {
-      ept = metal_container_of(node, struct rpmsg_endpoint, node);
-      metal_log(METAL_LOG_EMERGENCY, "ept %s\n", ept->name);
-    }
+  rpmsg_dump_epts(rdev);
 
   rpmsg_port_dump_buffer(rdev, &port->rxq, true);
   rpmsg_port_dump_buffer(rdev, &port->txq, false);
diff --git a/drivers/rpmsg/rpmsg_virtio.c b/drivers/rpmsg/rpmsg_virtio.c
index 6f839fa1bd4..f975fb4a0f9 100644
--- a/drivers/rpmsg/rpmsg_virtio.c
+++ b/drivers/rpmsg/rpmsg_virtio.c
@@ -411,8 +411,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;
-  FAR struct rpmsg_endpoint *ept;
-  FAR struct metal_list *node;
   bool needunlock = false;
 
   metal_log(METAL_LOG_EMERGENCY, "Local: %s Remote: %s Headrx %u\n",
@@ -440,13 +438,7 @@ static void rpmsg_virtio_dump(FAR struct rpmsg_s *rpmsg)
   metal_log(METAL_LOG_EMERGENCY, "rpmsg vq TX:\n");
   virtqueue_dump(rvdev->svq);
 
-  metal_log(METAL_LOG_EMERGENCY, "  rpmsg ept list:\n");
-
-  metal_list_for_each(&rdev->endpoints, node)
-    {
-      ept = metal_container_of(node, struct rpmsg_endpoint, node);
-      metal_log(METAL_LOG_EMERGENCY, "    ept %s\n", ept->name);
-    }
+  rpmsg_dump_epts(rdev);
 
   metal_log(METAL_LOG_EMERGENCY, "  rpmsg buffer list:\n");
 
diff --git a/drivers/rpmsg/rpmsg_virtio_lite.c 
b/drivers/rpmsg/rpmsg_virtio_lite.c
index e9316dd1313..c3e9da519f9 100644
--- a/drivers/rpmsg/rpmsg_virtio_lite.c
+++ b/drivers/rpmsg/rpmsg_virtio_lite.c
@@ -479,8 +479,6 @@ static void rpmsg_virtio_lite_dump(FAR struct rpmsg_s 
*rpmsg)
       (FAR struct rpmsg_virtio_lite_priv_s *)rpmsg;
   FAR struct rpmsg_device *rdev = rpmsg_get_rdev_by_rpmsg(rpmsg);
   FAR struct rpmsg_virtio_device *rvdev = &priv->rvdev;
-  FAR struct rpmsg_endpoint *ept;
-  FAR struct metal_list *node;
   bool needlock = true;
 
   metal_log(METAL_LOG_EMERGENCY, "Remote: %s headrx %d\n",
@@ -511,13 +509,7 @@ static void rpmsg_virtio_lite_dump(FAR struct rpmsg_s 
*rpmsg)
   metal_log(METAL_LOG_EMERGENCY, "rpmsg vq TX:\n");
   virtqueue_dump(rvdev->svq);
 
-  metal_log(METAL_LOG_EMERGENCY, "  rpmsg ept list:\n");
-
-  metal_list_for_each(&rdev->endpoints, node)
-    {
-      ept = metal_container_of(node, struct rpmsg_endpoint, node);
-      metal_log(METAL_LOG_EMERGENCY, "    ept %s\n", ept->name);
-    }
+  rpmsg_dump_epts(rdev);
 
   metal_log(METAL_LOG_EMERGENCY, "  rpmsg buffer list:\n");
 

Reply via email to