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: