Message ID | 20211020192643.476895-2-francesco.dolcini@toradex.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | serial: imx: fix unregister/register console | expand |
On Wed, Oct 20, 2021 at 09:26:42PM +0200, Francesco Dolcini wrote: > From: Stefan Agner <stefan@agner.ch> > > If the device used as a serial console gets detached/attached at runtime, > register_console() will try to call imx_uart_setup_console(), but this > is not possible since it is marked as __init. > > For instance > > # cat /sys/devices/virtual/tty/console/active > tty1 ttymxc0 > # echo -n N > /sys/devices/virtual/tty/console/subsystem/ttymxc0/console > # echo -n Y > /sys/devices/virtual/tty/console/subsystem/ttymxc0/console > > [ 73.166649] 8<--- cut here --- > [ 73.167005] Unable to handle kernel paging request at virtual address c154d928 > [ 73.167601] pgd = 55433e84 > [ 73.167875] [c154d928] *pgd=8141941e(bad) > [ 73.168304] Internal error: Oops: 8000000d [#1] SMP ARM > [ 73.168429] Modules linked in: > [ 73.168522] CPU: 0 PID: 536 Comm: sh Not tainted 5.15.0-rc6-00056-g3968ddcf05fb #3 > [ 73.168675] Hardware name: Freescale i.MX6 Ultralite (Device Tree) > [ 73.168791] PC is at imx_uart_console_setup+0x0/0x238 > [ 73.168927] LR is at try_enable_new_console+0x98/0x124 > [ 73.169056] pc : [<c154d928>] lr : [<c0196f44>] psr: a0000013 > [ 73.169178] sp : c2ef5e70 ip : 00000000 fp : 00000000 > [ 73.169281] r10: 00000000 r9 : c02cf970 r8 : 00000000 > [ 73.169389] r7 : 00000001 r6 : 00000001 r5 : c1760164 r4 : c1e0fb08 > [ 73.169512] r3 : c154d928 r2 : 00000000 r1 : efffcbd1 r0 : c1760164 > [ 73.169641] Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none > [ 73.169782] Control: 10c5387d Table: 8345406a DAC: 00000051 > [ 73.169895] Register r0 information: non-slab/vmalloc memory > [ 73.170032] Register r1 information: non-slab/vmalloc memory > [ 73.170158] Register r2 information: NULL pointer > [ 73.170273] Register r3 information: non-slab/vmalloc memory > [ 73.170397] Register r4 information: non-slab/vmalloc memory > [ 73.170521] Register r5 information: non-slab/vmalloc memory > [ 73.170647] Register r6 information: non-paged memory > [ 73.170771] Register r7 information: non-paged memory > [ 73.170892] Register r8 information: NULL pointer > [ 73.171009] Register r9 information: non-slab/vmalloc memory > [ 73.171142] Register r10 information: NULL pointer > [ 73.171259] Register r11 information: NULL pointer > [ 73.171375] Register r12 information: NULL pointer > [ 73.171494] Process sh (pid: 536, stack limit = 0xcd1ba82f) > [ 73.171621] Stack: (0xc2ef5e70 to 0xc2ef6000) > [ 73.171731] 5e60: ???????? ???????? ???????? ???????? > [ 73.171899] 5e80: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.172059] 5ea0: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.172217] 5ec0: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.172377] 5ee0: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.172537] 5f00: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.172698] 5f20: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.172856] 5f40: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.173016] 5f60: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.173177] 5f80: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.173336] 5fa0: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.173496] 5fc0: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.173654] 5fe0: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.173826] [<c0196f44>] (try_enable_new_console) from [<c01984a8>] (register_console+0x10c/0x2ec) > [ 73.174053] [<c01984a8>] (register_console) from [<c06e2c90>] (console_store+0x14c/0x168) > [ 73.174262] [<c06e2c90>] (console_store) from [<c0383718>] (kernfs_fop_write_iter+0x110/0x1cc) > [ 73.174470] [<c0383718>] (kernfs_fop_write_iter) from [<c02cf5f4>] (vfs_write+0x31c/0x548) > [ 73.174679] [<c02cf5f4>] (vfs_write) from [<c02cf970>] (ksys_write+0x60/0xec) > [ 73.174863] [<c02cf970>] (ksys_write) from [<c0100080>] (ret_fast_syscall+0x0/0x1c) > [ 73.175052] Exception stack(0xc2ef5fa8 to 0xc2ef5ff0) > [ 73.175167] 5fa0: ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.175327] 5fc0: ???????? ???????? ???????? ???????? ???????? ???????? ???????? ???????? > [ 73.175486] 5fe0: ???????? ???????? ???????? ???????? > [ 73.175608] Code: 00000000 00000000 00000000 00000000 (00000000) > [ 73.175744] ---[ end trace 9b75121265109bf1 ]--- > > A similar issue could be triggered unbinding/binding the serial console > device [*]. > > Drop __init so that imx_uart_setup_console() can be safely called at > runtime. > > [*] https://lore.kernel.org/all/20181114174940.7865-3-stefan@agner.ch/ > > Fixes: a3cb39d258ef ("serial: core: Allow detach and attach serial device for console") > Signed-off-by: Stefan Agner <stefan@agner.ch> > Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com> Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Thanks Uwe
On Wed, Oct 20, 2021 at 10:27 PM Francesco Dolcini <francesco.dolcini@toradex.com> wrote: > > From: Stefan Agner <stefan@agner.ch> > > If the device used as a serial console gets detached/attached at runtime, > register_console() will try to call imx_uart_setup_console(), but this > is not possible since it is marked as __init. Thank you for fixing this! > For instance > > # cat /sys/devices/virtual/tty/console/active > tty1 ttymxc0 > # echo -n N > /sys/devices/virtual/tty/console/subsystem/ttymxc0/console > # echo -n Y > /sys/devices/virtual/tty/console/subsystem/ttymxc0/console Can we leave only something like below in the commit message? > [ 73.167005] Unable to handle kernel paging request at virtual address c154d928 > [ 73.168304] Internal error: Oops: 8000000d [#1] SMP ARM > [ 73.168522] CPU: 0 PID: 536 Comm: sh Not tainted 5.15.0-rc6-00056-g3968ddcf05fb #3 ... > [ 73.168791] PC is at imx_uart_console_setup+0x0/0x238 > [ 73.168927] LR is at try_enable_new_console+0x98/0x124 ... > [ 73.173826] [<c0196f44>] (try_enable_new_console) from [<c01984a8>] (register_console+0x10c/0x2ec) > [ 73.174053] [<c01984a8>] (register_console) from [<c06e2c90>] (console_store+0x14c/0x168) > [ 73.174262] [<c06e2c90>] (console_store) from [<c0383718>] (kernfs_fop_write_iter+0x110/0x1cc) > A similar issue could be triggered unbinding/binding the serial console on unbinding/binding > device [*]. > > Drop __init so that imx_uart_setup_console() can be safely called at > runtime. > > [*] https://lore.kernel.org/all/20181114174940.7865-3-stefan@agner.ch/ Make it Link: tag? > Fixes: a3cb39d258ef ("serial: core: Allow detach and attach serial device for console") > Signed-off-by: Stefan Agner <stefan@agner.ch> > Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com> With above nit-picks addressed, FWIW, Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
On Wed, Oct 20, 2021 at 10:54:26PM +0300, Andy Shevchenko wrote: > On Wed, Oct 20, 2021 at 10:27 PM Francesco Dolcini > <francesco.dolcini@toradex.com> wrote: > > > > From: Stefan Agner <stefan@agner.ch> > > > > If the device used as a serial console gets detached/attached at runtime, > > register_console() will try to call imx_uart_setup_console(), but this > > is not possible since it is marked as __init. > > Thank you for fixing this! > > > For instance > > > > # cat /sys/devices/virtual/tty/console/active > > tty1 ttymxc0 > > # echo -n N > /sys/devices/virtual/tty/console/subsystem/ttymxc0/console > > # echo -n Y > /sys/devices/virtual/tty/console/subsystem/ttymxc0/console > > Can we leave only something like below in the commit message? > > > [ 73.167005] Unable to handle kernel paging request at virtual address c154d928 > > [ 73.168304] Internal error: Oops: 8000000d [#1] SMP ARM > > [ 73.168522] CPU: 0 PID: 536 Comm: sh Not tainted 5.15.0-rc6-00056-g3968ddcf05fb #3 > ... > > [ 73.168791] PC is at imx_uart_console_setup+0x0/0x238 > > [ 73.168927] LR is at try_enable_new_console+0x98/0x124 > ... > > [ 73.173826] [<c0196f44>] (try_enable_new_console) from [<c01984a8>] (register_console+0x10c/0x2ec) > > [ 73.174053] [<c01984a8>] (register_console) from [<c06e2c90>] (console_store+0x14c/0x168) > > [ 73.174262] [<c06e2c90>] (console_store) from [<c0383718>] (kernfs_fop_write_iter+0x110/0x1cc) > > > A similar issue could be triggered unbinding/binding the serial console > > on unbinding/binding > > > device [*]. > > > > Drop __init so that imx_uart_setup_console() can be safely called at > > runtime. > > > > [*] https://lore.kernel.org/all/20181114174940.7865-3-stefan@agner.ch/ > > Make it Link: tag? > > > Fixes: a3cb39d258ef ("serial: core: Allow detach and attach serial device for console") > > Signed-off-by: Stefan Agner <stefan@agner.ch> > > Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com> > > With above nit-picks addressed, FWIW, Those are not a big deal, I'll edit the changelog text... thanks, greg k-h
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c index 8b121cd869e9..51a9f9423b1a 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c @@ -2017,7 +2017,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) * If the port was already initialised (eg, by a boot loader), * try to determine the current setup. */ -static void __init +static void imx_uart_console_get_options(struct imx_port *sport, int *baud, int *parity, int *bits) { @@ -2076,7 +2076,7 @@ imx_uart_console_get_options(struct imx_port *sport, int *baud, } } -static int __init +static int imx_uart_console_setup(struct console *co, char *options) { struct imx_port *sport;