Message ID | 20220407071619.102249-2-jaewon02.kim@samsung.com (mailing list archive) |
---|---|
State | Accepted |
Commit | e73b5c7f3d34c159447de0d24110f1df6d1b6615 |
Headers | show |
Series | tty: serial: samsung: add spin_lock in console_write | expand |
On 07. 04. 22, 9:16, Jaewon Kim wrote: > The console_write and IRQ handler can run concurrently. > Problems may occurs console_write is continuously executed while > the IRQ handler is running. From the patch POV: Reviewed-by: Jiri Slaby <jirislaby@kernel.org> But given this is a v3 with no version changelog below "---", you've just kicked the Greg's bot to wake up :P. > Signed-off-by: Jaewon Kim <jaewon02.kim@samsung.com> > --- > drivers/tty/serial/samsung_tty.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c > index e1585fbae909..8af5aceb9f4e 100644 > --- a/drivers/tty/serial/samsung_tty.c > +++ b/drivers/tty/serial/samsung_tty.c > @@ -2480,12 +2480,24 @@ s3c24xx_serial_console_write(struct console *co, const char *s, > unsigned int count) > { > unsigned int ucon = rd_regl(cons_uart, S3C2410_UCON); > + unsigned long flags; > + bool locked = true; > > /* not possible to xmit on unconfigured port */ > if (!s3c24xx_port_configured(ucon)) > return; > > + if (cons_uart->sysrq) > + locked = false; > + else if (oops_in_progress) > + locked = spin_trylock_irqsave(&cons_uart->lock, flags); > + else > + spin_lock_irqsave(&cons_uart->lock, flags); > + > uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar); > + > + if (locked) > + spin_unlock_irqrestore(&cons_uart->lock, flags); > } > > /* Shouldn't be __init, as it can be instantiated from other module */
On 07/04/2022 09:46, Jiri Slaby wrote: > On 07. 04. 22, 9:16, Jaewon Kim wrote: >> The console_write and IRQ handler can run concurrently. >> Problems may occurs console_write is continuously executed while >> the IRQ handler is running. > > From the patch POV: > > Reviewed-by: Jiri Slaby <jirislaby@kernel.org> > > But given this is a v3 with no version changelog below "---", you've > just kicked the Greg's bot to wake up :P. > There was a cover letter with such changelog: https://lore.kernel.org/all/20220407071619.102249-1-jaewon02.kim@samsung.com/ It's indeed easy to miss... Best regards, Krzysztof
On 07. 04. 22, 9:58, Krzysztof Kozlowski wrote: > On 07/04/2022 09:46, Jiri Slaby wrote: >> On 07. 04. 22, 9:16, Jaewon Kim wrote: >>> The console_write and IRQ handler can run concurrently. >>> Problems may occurs console_write is continuously executed while >>> the IRQ handler is running. >> >> From the patch POV: >> >> Reviewed-by: Jiri Slaby <jirislaby@kernel.org> >> >> But given this is a v3 with no version changelog below "---", you've >> just kicked the Greg's bot to wake up :P. >> > > There was a cover letter with such changelog: > https://lore.kernel.org/all/20220407071619.102249-1-jaewon02.kim@samsung.com/ > > It's indeed easy to miss... Ah, OK, my bad -- I skipped it as usual -- I don't consider cover letters that useful. And in this case, even more provided it is for a single patch. thanks,
diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c index e1585fbae909..8af5aceb9f4e 100644 --- a/drivers/tty/serial/samsung_tty.c +++ b/drivers/tty/serial/samsung_tty.c @@ -2480,12 +2480,24 @@ s3c24xx_serial_console_write(struct console *co, const char *s, unsigned int count) { unsigned int ucon = rd_regl(cons_uart, S3C2410_UCON); + unsigned long flags; + bool locked = true; /* not possible to xmit on unconfigured port */ if (!s3c24xx_port_configured(ucon)) return; + if (cons_uart->sysrq) + locked = false; + else if (oops_in_progress) + locked = spin_trylock_irqsave(&cons_uart->lock, flags); + else + spin_lock_irqsave(&cons_uart->lock, flags); + uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar); + + if (locked) + spin_unlock_irqrestore(&cons_uart->lock, flags); } /* Shouldn't be __init, as it can be instantiated from other module */
The console_write and IRQ handler can run concurrently. Problems may occurs console_write is continuously executed while the IRQ handler is running. Signed-off-by: Jaewon Kim <jaewon02.kim@samsung.com> --- drivers/tty/serial/samsung_tty.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)