Skip to contentSkip to conversation

KGDB-8250: handle shared IRQ properly

PATCH In review Jan Kiszka 1 participant 1 message Jan 29, 2008

lore
Share & tools
lore

Jan Kiszka

author
#0 lore raw

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.

---
 drivers/serial/8250_kgdb.c |   17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)
drivers/serial/8250_kgdb.c +9 -8
Index: b/drivers/serial/8250_kgdb.c
===================================================================
@@ -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;
 }