Message ID | 20241203094009.67697-1-ende.tan@starfivetech.com |
---|---|
State | New |
Headers | show |
Series | [RT,1/1] tty/serial/sifive: Make the locking RT aware | expand |
On 2024-12-03 17:40:09 [+0800], ende.tan@starfivetech.com wrote: > From: Tan En De <ende.tan@starfivetech.com> > > The lock is a sleeping lock and local_irq_save() is not the optimsation > we are looking for. Redo it to make it work on -RT and non-RT. You need to state which kernel this needs to be applied to. The change you looking for is 32c694ec3efc2 ("serial: sifive: Use uart_prepare_sysrq_char() to handle sysrq.") > Signed-off-by: Tan En De <ende.tan@starfivetech.com> > Signed-off-by: Tan Ley Foon <leyfoon.tan@starfivetech.com> Sebastian
> -----Original Message----- > You need to state which kernel this needs to be applied to. > The change you looking for is > 32c694ec3efc2 ("serial: sifive: Use uart_prepare_sysrq_char() to > handle sysrq.") Thanks for pointing this out, I overlooked the commit in the mainline kernel. BTW, the commit is not in v6.6.63-rt46-rebase.
On 2024-12-04 15:24:38 [+0000], EnDe Tan wrote: > > -----Original Message----- > > You need to state which kernel this needs to be applied to. > > The change you looking for is > > 32c694ec3efc2 ("serial: sifive: Use uart_prepare_sysrq_char() to > > handle sysrq.") > > Thanks for pointing this out, I overlooked the commit in the mainline kernel. > BTW, the commit is not in v6.6.63-rt46-rebase. Indeed. Clark, could you please backport 32c694ec3efc2 serial: sifive: Use uart_prepare_sysrq_char() to handle sysrq. for v6.6-RT? Sebastian
yes, I'll put it in my pending RC On Thu, Dec 5, 2024 at 8:06 AM Sebastian Andrzej Siewior <bigeasy@linutronix.de> wrote: > > On 2024-12-04 15:24:38 [+0000], EnDe Tan wrote: > > > -----Original Message----- > > > You need to state which kernel this needs to be applied to. > > > The change you looking for is > > > 32c694ec3efc2 ("serial: sifive: Use uart_prepare_sysrq_char() to > > > handle sysrq.") > > > > Thanks for pointing this out, I overlooked the commit in the mainline kernel. > > BTW, the commit is not in v6.6.63-rt46-rebase. > > Indeed. Clark, could you please backport > 32c694ec3efc2 serial: sifive: Use uart_prepare_sysrq_char() to handle sysrq. > > for v6.6-RT? > > Sebastian >
diff --git a/drivers/tty/serial/sifive.c b/drivers/tty/serial/sifive.c index b296e57a9dee..074c9f392634 100644 --- a/drivers/tty/serial/sifive.c +++ b/drivers/tty/serial/sifive.c @@ -791,13 +791,10 @@ static void sifive_serial_console_write(struct console *co, const char *s, if (!ssp) return; - local_irq_save(flags); - if (ssp->port.sysrq) - locked = 0; - else if (oops_in_progress) - locked = uart_port_trylock(&ssp->port); + if (ssp->port.sysrq || oops_in_progress) + locked = uart_port_trylock_irqsave(&ssp->port, &flags); else - uart_port_lock(&ssp->port); + uart_port_lock_irqsave(&ssp->port, &flags); ier = __ssp_readl(ssp, SIFIVE_SERIAL_IE_OFFS); __ssp_writel(0, SIFIVE_SERIAL_IE_OFFS, ssp); @@ -807,8 +804,7 @@ static void sifive_serial_console_write(struct console *co, const char *s, __ssp_writel(ier, SIFIVE_SERIAL_IE_OFFS, ssp); if (locked) - uart_port_unlock(&ssp->port); - local_irq_restore(flags); + uart_port_unlock_irqrestore(&ssp->port, flags); } static int sifive_serial_console_setup(struct console *co, char *options)