mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
serial: 8250: fix possible ISR soft lockup
There are rare cases in which the host gets stuck in the ISR because it is flooded with messages during the startup phase. The reason for the soft lockup in the ISR is the missing FIFO error IRQ (FIFOE) handling. Not handling it and reporting IRQ_HANDLED triggers the IRQ immediately again. Fix this by adding a check for the FIFOE status and clearing the FIFO if no data is ready (DR). This behavior was observed on an AM62L device which uses the OMAP 8250 driver. Fix it for all 8250 drivers, since the OMAP driver's special IRQ setup handling may trigger this behavior more frequently, but it is not ensured that other 8250 drivers aren't affected. Signed-off-by: Marco Felsch <m.felsch@pengutronix.de> Link: https://patch.msgid.link/20260519-v7-1-topic-serial-8250-v1-1-56b04293a246@pengutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5aaaf31af7
commit
0c6bf45e5a
|
|
@ -1799,6 +1799,13 @@ void serial8250_handle_irq_locked(struct uart_port *port, unsigned int iir)
|
|||
|
||||
status = serial_lsr_in(up);
|
||||
|
||||
/*
|
||||
* Recover from no-data-ready and FIFO error condition to avoid getting
|
||||
* stuck in the ISR.
|
||||
*/
|
||||
if (!(status & UART_LSR_DR) && (status & UART_LSR_FIFOE))
|
||||
serial8250_clear_and_reinit_fifos(up);
|
||||
|
||||
/*
|
||||
* If port is stopped and there are no error conditions in the
|
||||
* FIFO, then don't drain the FIFO, as this may lead to TTY buffer
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user