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

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

commit cd99aa29f8cd4081eb3cffe6748d68e6b261d459
Author: mazhuang <[email protected]>
AuthorDate: Mon Mar 2 11:52:23 2026 +0800

    rpmsg/rpmsg_port: introduce rpmsg_port_node_s wrapper for queue nodes
    
    Replace the raw list_node pointers in rpmsg_port_queue_s with a
    dedicated struct rpmsg_port_node_s that embeds the list_node, so
    per-buffer metadata (e.g. a retransmission count) can be added next to
    the queue linkage later.
    
    Signed-off-by: mazhuang <[email protected]>
---
 drivers/rpmsg/rpmsg_port.c | 25 +++++++++++++------------
 drivers/rpmsg/rpmsg_port.h | 19 ++++++++++++-------
 2 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/drivers/rpmsg/rpmsg_port.c b/drivers/rpmsg/rpmsg_port.c
index c37e3af5205..7ef8692aea7 100644
--- a/drivers/rpmsg/rpmsg_port.c
+++ b/drivers/rpmsg/rpmsg_port.c
@@ -93,12 +93,12 @@ static void rpmsg_port_post(FAR sem_t *sem)
  ****************************************************************************/
 
 static void rpmsg_port_add_node(FAR struct rpmsg_port_list_s *list,
-                                FAR struct list_node *node)
+                                FAR struct rpmsg_port_node_s *node)
 {
   irqstate_t flags;
 
   flags = spin_lock_irqsave(&list->lock);
-  list_add_tail(&list->head, node);
+  list_add_tail(&list->head, &node->node);
   list->num++;
   spin_unlock_irqrestore(&list->lock, flags);
 }
@@ -107,7 +107,7 @@ static void rpmsg_port_add_node(FAR struct 
rpmsg_port_list_s *list,
  * Name: rpmsg_port_remove_node
  ****************************************************************************/
 
-static FAR struct list_node *
+static FAR struct rpmsg_port_node_s *
 rpmsg_port_remove_node(FAR struct rpmsg_port_list_s *list)
 {
   FAR struct list_node *node;
@@ -121,7 +121,7 @@ rpmsg_port_remove_node(FAR struct rpmsg_port_list_s *list)
     }
 
   spin_unlock_irqrestore(&list->lock, flags);
-  return node;
+  return metal_container_of(node, struct rpmsg_port_node_s, node);
 }
 
 /****************************************************************************
@@ -152,9 +152,9 @@ static int rpmsg_port_create_queue(FAR struct 
rpmsg_port_queue_s *queue,
                                    uint16_t count, uint16_t len,
                                    FAR void *buf)
 {
-  FAR struct list_node *node;
+  FAR struct rpmsg_port_node_s *node;
 
-  node = kmm_malloc(count * sizeof(struct list_node));
+  node = kmm_malloc(count * sizeof(struct rpmsg_port_node_s));
   if (node == NULL)
     {
       return -ENOMEM;
@@ -652,7 +652,7 @@ rpmsg_port_queue_get_available_buffer(FAR struct 
rpmsg_port_queue_s *queue,
 {
   FAR struct rpmsg_port_s *port = queue->port;
   FAR struct rpmsg_port_header_s *hdr;
-  FAR struct list_node *node;
+  FAR struct rpmsg_port_node_s *node;
   int ret;
 
   for (; ; )
@@ -692,7 +692,7 @@ rpmsg_port_queue_get_available_buffer(FAR struct 
rpmsg_port_queue_s *queue,
 FAR void rpmsg_port_queue_return_buffer(FAR struct rpmsg_port_queue_s *queue,
                                         FAR struct rpmsg_port_header_s *hdr)
 {
-  FAR struct list_node *node = RPMSG_PORT_BUF_TO_NODE(queue, hdr);
+  FAR struct rpmsg_port_node_s *node = RPMSG_PORT_BUF_TO_NODE(queue, hdr);
 
   rpmsg_port_add_node(&queue->free, node);
   rpmsg_port_post(&queue->free.sem);
@@ -705,7 +705,7 @@ FAR void rpmsg_port_queue_return_buffer(FAR struct 
rpmsg_port_queue_s *queue,
 FAR struct rpmsg_port_header_s *
 rpmsg_port_queue_get_buffer(FAR struct rpmsg_port_queue_s *queue, bool wait)
 {
-  FAR struct list_node *node;
+  FAR struct rpmsg_port_node_s *node;
 
   for (; ; )
     {
@@ -730,7 +730,7 @@ rpmsg_port_queue_get_buffer(FAR struct rpmsg_port_queue_s 
*queue, bool wait)
 void rpmsg_port_queue_add_buffer(FAR struct rpmsg_port_queue_s *queue,
                                  FAR struct rpmsg_port_header_s *hdr)
 {
-  FAR struct list_node *node = RPMSG_PORT_BUF_TO_NODE(queue, hdr);
+  FAR struct rpmsg_port_node_s *node = RPMSG_PORT_BUF_TO_NODE(queue, hdr);
 
   rpmsg_port_add_node(&queue->ready, node);
   rpmsg_port_post(&queue->ready.sem);
@@ -836,7 +836,7 @@ static void rpmsg_port_dump_buffer(FAR struct rpmsg_device 
*rdev,
                                    FAR struct rpmsg_port_queue_s *queue,
                                    bool rx)
 {
-  FAR struct list_node *node;
+  FAR struct rpmsg_port_node_s *node;
   irqstate_t flags = spin_lock_irqsave(&queue->ready.lock);
 
   metal_log(METAL_LOG_EMERGENCY,
@@ -845,7 +845,8 @@ static void rpmsg_port_dump_buffer(FAR struct rpmsg_device 
*rdev,
             rpmsg_port_queue_nused(queue),
             rpmsg_port_queue_navail(queue));
   metal_log(METAL_LOG_EMERGENCY, "rpmsg buffer list:\n");
-  list_for_every(&queue->ready.head, node)
+  list_for_every_entry(&queue->ready.head, node,
+                       struct rpmsg_port_node_s, node)
     {
       FAR struct rpmsg_port_header_s *hdr =
         RPMSG_PORT_NODE_TO_BUF(queue, node);
diff --git a/drivers/rpmsg/rpmsg_port.h b/drivers/rpmsg/rpmsg_port.h
index 462af29db39..43d793ff668 100644
--- a/drivers/rpmsg/rpmsg_port.h
+++ b/drivers/rpmsg/rpmsg_port.h
@@ -67,37 +67,42 @@ struct rpmsg_port_list_s
   struct list_node head;          /* List head */
 };
 
+struct rpmsg_port_node_s
+{
+  struct list_node node;          /* List node for free/ready/retx queue */
+};
+
 struct rpmsg_port_s;
 
 struct rpmsg_port_queue_s
 {
   /* Pointer to the rpmsg port handler */
 
-  FAR struct rpmsg_port_s  *port;
+  FAR struct rpmsg_port_s      *port;
 
   /* Indicate buffers current queue managed is dynamic alloced */
 
-  bool                     alloced;
+  bool                         alloced;
 
   /* Buffer array's base address of current queue managed */
 
-  FAR void                 *buf;
+  FAR void                     *buf;
 
   /* Node related to buffer for buffer management */
 
-  FAR struct list_node     *node;
+  FAR struct rpmsg_port_node_s *node;
 
   /* Length of buffers current queue managed */
 
-  uint16_t                 len;
+  uint16_t                     len;
 
   /* Free list of buffers which have not been occupied data yet */
 
-  struct rpmsg_port_list_s free;
+  struct rpmsg_port_list_s     free;
 
   /* Ready list of buffers which have been occupied data already */
 
-  struct rpmsg_port_list_s ready;
+  struct rpmsg_port_list_s     ready;
 };
 
 typedef void (*rpmsg_port_rx_cb_t)(FAR struct rpmsg_port_s *port,

Reply via email to