From: Ingo Molnar Date: Fri, 3 Jul 2009 08:30:01 -0500 Subject: serial: 8250: Call flush_to_ldisc when the irq is threaded Signed-off-by: Ingo Molnar --- drivers/tty/serial/8250.c | 2 ++ drivers/tty/tty_buffer.c | 4 ++++ 2 files changed, 6 insertions(+) Index: linux-3.2/drivers/tty/serial/8250.c =================================================================== --- linux-3.2.orig/drivers/tty/serial/8250.c +++ linux-3.2/drivers/tty/serial/8250.c @@ -1631,12 +1631,14 @@ static irqreturn_t serial8250_interrupt( l = l->next; +#ifndef CONFIG_PREEMPT_RT_FULL if (l == i->head && pass_counter++ > PASS_LIMIT) { /* If we hit this, we're dead. */ printk_ratelimited(KERN_ERR "serial8250: too much work for irq%d\n", irq); break; } +#endif } while (l != end); spin_unlock(&i->lock); Index: linux-3.2/drivers/tty/tty_buffer.c =================================================================== --- linux-3.2.orig/drivers/tty/tty_buffer.c +++ linux-3.2/drivers/tty/tty_buffer.c @@ -493,10 +493,14 @@ void tty_flip_buffer_push(struct tty_str tty->buf.tail->commit = tty->buf.tail->used; spin_unlock_irqrestore(&tty->buf.lock, flags); +#ifndef CONFIG_PREEMPT_RT_FULL if (tty->low_latency) flush_to_ldisc(&tty->buf.work); else schedule_work(&tty->buf.work); +#else + flush_to_ldisc(&tty->buf.work); +#endif } EXPORT_SYMBOL(tty_flip_buffer_push);