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");