KGDB-8250: handle shared IRQ properly
PATCH 2/5 KGDB-8250: handle shared IRQ properly
Currently, KGDB's 8250 driver always reports IRQs as handled, though it registers the line with IRQF_SHARED. This patch fixes the behavior by returning the appropriate values from the interrupt handler.
Signed-off-by Jan Kiszka <[email protected]>
--- drivers/serial/8250_kgdb.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/serial/8250_kgdb.c +9 -8
@@ -152,14 +152,15 @@ static int kgdb_get_debug_char(void)static irqreturn_t kgdb8250_interrupt (int irq,void *dev_id) { -if (kgdb_ioread (UART_IIR ) &UART_IIR_RDI ) { -/* Throw away the data if another I/O routine is active. */ -if (kgdb_io_ops.read_char != kgdb_get_debug_char && - (kgdb_ioread (UART_LSR ) &UART_LSR_DR )) -kgdb_ioread (UART_RX ); -else -breakpoint (); - } +if (!(kgdb_ioread (UART_IIR ) &UART_IIR_RDI )) +return IRQ_NONE ; + +/* Throw away the data if another I/O routine is active. */ +if (kgdb_io_ops.read_char != kgdb_get_debug_char && + (kgdb_ioread (UART_LSR ) &UART_LSR_DR )) +kgdb_ioread (UART_RX ); +else +breakpoint ();return IRQ_HANDLED ; }