This patch prevents starting up a useless IRQ-thread for IRQ-1, because this IRQ is running in IRQF_NODELAY context due to the timer interrupt. Signed-off-by: Remy Bohmer --- drivers/serial/atmel_serial.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) Index: linux-2.6.23/drivers/serial/atmel_serial.c =================================================================== --- linux-2.6.23.orig/drivers/serial/atmel_serial.c 2007-12-18 15:49:02.000000000 +0100 +++ linux-2.6.23/drivers/serial/atmel_serial.c 2007-12-18 15:56:37.000000000 +0100 @@ -549,6 +549,7 @@ static int atmel_startup(struct uart_por { struct atmel_uart_port *atmel_port = (struct atmel_uart_port *) port; int retval; + unsigned long irqflags = IRQF_SHARED; /* * Ensure that no interrupts are enabled otherwise when @@ -557,10 +558,17 @@ static int atmel_startup(struct uart_por */ UART_PUT_IDR(port, -1); +#ifdef CONFIG_PREEMPT_RT + /* IRQ1 is the System IRQ, which is shared with the Timer-IRQ, and + thus it is running in IRQF_NODELAY context. By setting this flag + here also, we prevent starting up a useless IRQ-thread.*/ + if (port->irq == 1) + irqflags |= IRQF_NODELAY; +#endif /* * Allocate the IRQ */ - retval = request_irq(port->irq, atmel_interrupt, IRQF_SHARED, + retval = request_irq(port->irq, atmel_interrupt, irqflags, "atmel_serial", port); if (retval) { printk("atmel_serial: atmel_startup - Can't get irq\n");