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

xiaoxiang 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 8b078d261f rptun: fix rptun_start() failed
8b078d261f is described below

commit 8b078d261f12289c909520c2f17be6312e708b0f
Author: ligd <liguidi...@xiaomi.com>
AuthorDate: Fri Feb 17 18:09:40 2023 +0800

    rptun: fix rptun_start() failed
    
    Signed-off-by: ligd <liguidi...@xiaomi.com>
---
 drivers/rptun/rptun.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/drivers/rptun/rptun.c b/drivers/rptun/rptun.c
index e9240216e9..d38bdc2d1e 100644
--- a/drivers/rptun/rptun.c
+++ b/drivers/rptun/rptun.c
@@ -738,9 +738,6 @@ static int rptun_dev_start(FAR struct remoteproc *rproc)
         }
     }
 
-  /* Add priv to list */
-
-  metal_list_add_tail(&g_rptun_priv, &priv->node);
   nxrmutex_unlock(&g_rptun_lockcb);
 
   virtqueue_enable_cb(priv->rvdev.svq);
@@ -1068,6 +1065,11 @@ int rpmsg_register_callback(FAR void *priv_,
       FAR struct rptun_priv_s *priv;
 
       priv = metal_container_of(node, struct rptun_priv_s, node);
+      if (priv->rproc.state != RPROC_RUNNING)
+        {
+          continue;
+        }
+
       if (device_created)
         {
           device_created(&priv->rvdev.rdev, priv_);
@@ -1144,7 +1146,11 @@ void rpmsg_unregister_callback(FAR void *priv_,
 
           priv = metal_container_of(pnode,
                                     struct rptun_priv_s, node);
-          device_destroy(&priv->rvdev.rdev, priv_);
+
+          if (priv->rproc.state == RPROC_RUNNING)
+            {
+              device_destroy(&priv->rvdev.rdev, priv_);
+            }
         }
     }
 
@@ -1222,6 +1228,12 @@ int rptun_initialize(FAR struct rptun_dev_s *dev)
 
   nxsem_init(&priv->semtx, 0, 0);
 
+  /* Add priv to list */
+
+  nxrmutex_lock(&g_rptun_lockcb);
+  metal_list_add_tail(&g_rptun_priv, &priv->node);
+  nxrmutex_unlock(&g_rptun_lockcb);
+
   return OK;
 
 err_driver:

Reply via email to