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 */
