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

commit 183df1ef9e87820eefc2c68a039a712349983213
Author: mazhuang <[email protected]>
AuthorDate: Wed Mar 5 14:49:06 2025 +0800

    drivers/rptun: solve rptun_dev_stop crash in sim
    
    When execute 'rptun stop /dev/rptun/proxy' in the nsh,
    rpmsg_deinit_vdev(&priv->rvdev) will set rvdev->vdev = NULL,
    then the remoteproc_remove_virtio(priv->rvdev.vdev) input is NULL,
    which will cause crash, the backtrace as follow, so we save the
    rvdev->vdev pointer on vdev to solve this problem.
    
    (gdb) bt
    0  _assert (filename=0x4002aecc <nxrmutex_destroy+8> "\005D\220\v", 
linenum=1038, msg=0x400a26a8 "tx_vq", regs=0x400a2768) at misc/assert.c:827
    1  0x4002a1db in __assert (filename=0x400a2204 
"open-amp/lib/remoteproc/remoteproc.c", linenum=1038, msg=0x0) at 
assert/lib_assert.c:38
    2  0x4006fd83 in remoteproc_remove_virtio (rproc=0xf3ea1880, vdev=0x0) at 
open-amp/lib/remoteproc/remoteproc.c:1038
    3  0x4001b01d in rptun_dev_stop (rproc=0xf3ea1880, stop_ns=true) at 
rptun/rptun.c:979
    4  0x4001a45e in rptun_ioctl (rpmsg=0xf3ea16d0, cmd=11109, arg=0) at 
rptun/rptun.c:661
    5  0x40017246 in rpmsg_dev_ioctl_ (rpmsg=0xf3ea16d0, cmd=11109, arg=0) at 
rpmsg/rpmsg.c:138
    6  0x4001728e in rpmsg_dev_ioctl (filep=0xf3d70a14, cmd=11109, arg=0) at 
rpmsg/rpmsg.c:153
    7  0x4005ef51 in file_vioctl (filep=0xf3d70a14, req=11109, ap=0xf3d80f2c 
"\352\r\004@F\023\004@\230\020\330\363\353;\354\363(7\354", <incomplete 
sequence \363>)
       at vfs/fs_ioctl.c:70
    8  0x4005f2ff in ioctl (fd=3, req=11109) at vfs/fs_ioctl.c:294
    9  0x40041049 in cmd_rpmsg_once (vtbl=0xf3ec3728, path=0xf3ec3beb 
"/dev/rptun/proxy", argv=0xf3d81098, rpmsg_cb=0x40041346 <cmd_rptun_cb>) at 
nsh_syscmds.c:616
    10 0x400415c8 in cmd_rptun (vtbl=0xf3ec3728, argc=3, argv=0xf3d81098) at 
nsh_syscmds.c:766
    11 0x40036024 in nsh_command (vtbl=0xf3ec3728, argc=3, argv=0xf3d81098) at 
nsh_command.c:1275
    12 0x4003d044 in nsh_execute (vtbl=0xf3ec3728, argc=3, argv=0xf3d81098, 
param=0xf3d81078) at nsh_parse.c:716
    13 0x4003efcc in nsh_parse_command (vtbl=0xf3ec3728, cmdline=0xf3ec3be0 
"rptun") at nsh_parse.c:2809
    14 0x4003f129 in nsh_parse (vtbl=0xf3ec3728, cmdline=0xf3ec3be0 "rptun") at 
nsh_parse.c:2919
    15 0x40033ca4 in nsh_session (pstate=0xf3ec3728, login=1, argc=1, 
argv=0xf3d70ae0) at nsh_session.c:246
    16 0x400338ea in nsh_consolemain (argc=1, argv=0xf3d70ae0) at 
nsh_consolemain.c:75
    17 0x40033845 in nsh_main (argc=1, argv=0xf3d70ae0) at nsh_main.c:74
    18 0x4002bc9f in nxtask_startup (entrypt=0x400337d0 <nsh_main>, argc=1, 
argv=0xf3d70ae0) at sched/task_startup.c:72
    19 0x400077cc in nxtask_start () at task/task_start.c:116
    20 0x40031d2f in pre_start () at sim/sim_initialstate.c:53
    21 0x00000000 in ?? ()
    
    Signed-off-by: mazhuang <[email protected]>
---
 drivers/rptun/rptun.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/rptun/rptun.c b/drivers/rptun/rptun.c
index f231825bdf6..bdc0a68bf97 100644
--- a/drivers/rptun/rptun.c
+++ b/drivers/rptun/rptun.c
@@ -953,6 +953,7 @@ static int rptun_dev_stop(FAR struct remoteproc *rproc, 
bool stop_ns)
 {
   FAR struct rptun_priv_s *priv = rproc->priv;
   FAR struct rpmsg_device *rdev = &priv->rvdev.rdev;
+  FAR struct virtio_device *vdev = priv->rvdev.vdev;
 
   if (priv->rproc.state == RPROC_OFFLINE)
     {
@@ -975,7 +976,7 @@ static int rptun_dev_stop(FAR struct remoteproc *rproc, 
bool stop_ns)
   /* Remote proc remove */
 
   rpmsg_deinit_vdev(&priv->rvdev);
-  remoteproc_remove_virtio(rproc, priv->rvdev.vdev);
+  remoteproc_remove_virtio(rproc, vdev);
 
   /* Remote proc stop and shutdown */
 

Reply via email to