diff options
author | Richard Zhu <hongxing.zhu@nxp.com> | 2018-10-10 14:41:03 +0800 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2019-02-12 10:34:25 +0800 |
commit | fdc1b108fb6222798f9b882768bc783fca6a9819 (patch) | |
tree | ad05b1580a513e95bb22eb970209dcdd924bc99f /drivers/rpmsg | |
parent | ed7b5b93249664eae2f676de7f557dc323ce3488 (diff) |
MLK-19864 rpmsg: imx: fix the kernel panic during tty rpmsg demo
Fix the kernel panic during tty rpmsg str echo demo.
Root cause: The driver name may be flushed.
Use the kasprintf to setup the rpmsg tty driver name to
fix this issue.
[ 35.494361] Unable to handle kernel paging request at virtual address
ffff000021b4ba40
[ 35.502321] Mem abort info:
[ 35.505117] Exception class = DABT (current EL), IL = 32 bits
[ 35.511099] SET = 0, FnV = 0
[ 35.514188] EA = 0, S1PTW = 0
[ 35.517328] Data abort info:
[ 35.520255] ISV = 0, ISS = 0x00000007
[ 35.524130] CM = 0, WnR = 0
[ 35.527140] swapper pgtable: 4k pages, 48-bit VAs, pgd =
ffff0000096dd000
[ 35.533964] [ffff000021b4ba40] *pgd=000000097fffe803,
*pud=000000097fffd803, *pmd=0000000973d20003, *pte=0000000000000000
[ 35.544976] Internal error: Oops: 96000007 [#1] PREEMPT SMP
[ 35.550553] Modules linked in: imx_rpmsg_tty
[ 35.554843] CPU: 2 PID: 3911 Comm: sh Not tainted
4.14.62-05098-gcff652e-dirty #41
[ 35.562419] Hardware name: Freescale i.MX8QM MEK (DT)
[ 35.567479] task: ffff8008f3950000 task.stack: ffff000021b10000
[ 35.573413] PC is at string+0x28/0x98
[ 35.577080] LR is at vsnprintf+0x3c0/0x688
[ 35.581177] pc : [<ffff000008d5f1a0>] lr : [<ffff000008d61c70>]
pstate: a0000145
[ 35.588577] sp : ffff000021b13970
[ 35.591894] x29: ffff000021b13970 x28: ffff80097365f56f
[ 35.597219] x27: ffff0000092cf03a x26: ffff0000092cf03a
[ 35.602544] x25: ffff000021b13a80 x24: ffff8008f365f570
[ 35.607869] x23: 00000000ffffffd8 x22: ffff000008fc08dc
[ 35.613195] x21: 000000007fffffff x20: ffff000008fc08cc
[ 35.618512] x19: ffff8008f365f570 x18: 0000000000000000
[ 35.623827] x17: 0000ffffbec93588 x16: ffff00000820b2c0
[ 35.629144] x15: 0000000000000000 x14: ffffffffffffffff
[ 35.634461] x13: 0000000000000018 x12: 0101010101010101
[ 35.639777] x11: 0000000000000000 x10: ffff000021b13a80
[ 35.645085] x9 : ffff000021b13a80 x8 : ffff000021b13a80
[ 35.650402] x7 : ffff8008f365f570 x6 : fffffffffffffffe
[ 35.655718] x5 : 00000000ffffffd0 x4 : ffff000021b4ba40
[ 35.661035] x3 : ffff0a00ffffff04 x2 : ffff80097365f56f
[ 35.666354] x1 : ffff80097365f56f x0 : ffffffffffffffff
[ 35.671672] Process sh (pid: 3911, stack limit = 0xffff000021b10000)
[ 35.678022] Call trace:
[ 35.680465] Exception stack(0xffff000021b13830 to 0xffff000021b13970)
[ 35.686911] 3820: ffffffffffffffff
ffff80097365f56f
[ 35.694748] 3840: ffff80097365f56f ffff0a00ffffff04 ffff000021b4ba40
00000000ffffffd0
[ 35.702581] 3860: fffffffffffffffe ffff8008f365f570 ffff000021b13a80
ffff000021b13a80
[ 35.710409] 3880: ffff000021b13a80 0000000000000000 0101010101010101
0000000000000018
[ 35.718245] 38a0: ffffffffffffffff 0000000000000000 ffff00000820b2c0
0000ffffbec93588
[ 35.726081] 38c0: 0000000000000000 ffff8008f365f570 ffff000008fc08cc
000000007fffffff
[ 35.733908] 38e0: ffff000008fc08dc 00000000ffffffd8 ffff8008f365f570
ffff000021b13a80
[ 35.741744] 3900: ffff0000092cf03a ffff0000092cf03a ffff80097365f56f
ffff000021b13970
[ 35.749583] 3920: ffff000008d61c70 ffff000021b13970 ffff000008d5f1a0
00000000a0000145
[ 35.757417] 3940: ffff8008fff5fb00 0000000000001c00 0000ffffffffffff
ffff000008d61930
[ 35.765254] 3960: ffff000021b13970 ffff000008d5f1a0
[ 35.770129] [<ffff000008d5f1a0>] string+0x28/0x98
[ 35.774837] [<ffff000008d61c70>] vsnprintf+0x3c0/0x688
[ 35.779980] [<ffff000008d620e4>] sprintf+0x4c/0x58
Signed-off-by: Richard Zhu <hongxing.zhu@nxp.com>
Reviewed-by: Fugang Duan <fugang.duan@nxp.com>
Diffstat (limited to 'drivers/rpmsg')
-rw-r--r-- | drivers/rpmsg/imx_rpmsg_tty.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/rpmsg/imx_rpmsg_tty.c b/drivers/rpmsg/imx_rpmsg_tty.c index db200e03af3a..8228c0da287a 100644 --- a/drivers/rpmsg/imx_rpmsg_tty.c +++ b/drivers/rpmsg/imx_rpmsg_tty.c @@ -140,7 +140,6 @@ static const struct tty_operations imxrpmsgtty_ops = { static int rpmsg_tty_probe(struct rpmsg_device *rpdev) { int ret; - char name[80]; struct rpmsgtty_port *cport; struct tty_driver *rpmsgtty_driver; @@ -158,8 +157,7 @@ static int rpmsg_tty_probe(struct rpmsg_device *rpdev) } rpmsgtty_driver->driver_name = "rpmsg_tty"; - sprintf(name, "ttyRPMSG%d", rpdev->dst); - rpmsgtty_driver->name = name; + rpmsgtty_driver->name = kasprintf(GFP_KERNEL, "ttyRPMSG%d", rpdev->dst); rpmsgtty_driver->major = UNNAMED_MAJOR; rpmsgtty_driver->minor_start = 0; rpmsgtty_driver->type = TTY_DRIVER_TYPE_CONSOLE; @@ -214,6 +212,7 @@ static void rpmsg_tty_remove(struct rpmsg_device *rpdev) dev_info(&rpdev->dev, "rpmsg tty driver is removed\n"); tty_unregister_driver(cport->rpmsgtty_driver); + kfree(cport->rpmsgtty_driver->name); put_tty_driver(cport->rpmsgtty_driver); tty_port_destroy(&cport->port); cport->rpmsgtty_driver = NULL; |