diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-07-03 09:30:01 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-07-29 17:30:37 -0400 |
commit | 7f36d9deaafb246caadc3a94d785e9d856209e01 (patch) | |
tree | 5b0213738523c09688641583405b11bf7d9721e0 | |
parent | 295048108ae1c03ede2297c08133526c5a1b6b3b (diff) |
drivers/serial: call flush_to_ldisc when the irq is threaded
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | drivers/char/tty_buffer.c | 4 | ||||
-rw-r--r-- | drivers/serial/8250.c | 7 |
2 files changed, 10 insertions, 1 deletions
diff --git a/drivers/char/tty_buffer.c b/drivers/char/tty_buffer.c index 810ee25d66a4..fdd854206863 100644 --- a/drivers/char/tty_buffer.c +++ b/drivers/char/tty_buffer.c | |||
@@ -482,10 +482,14 @@ void tty_flip_buffer_push(struct tty_struct *tty) | |||
482 | tty->buf.tail->commit = tty->buf.tail->used; | 482 | tty->buf.tail->commit = tty->buf.tail->used; |
483 | spin_unlock_irqrestore(&tty->buf.lock, flags); | 483 | spin_unlock_irqrestore(&tty->buf.lock, flags); |
484 | 484 | ||
485 | #ifndef CONFIG_PREEMPT_RT | ||
485 | if (tty->low_latency) | 486 | if (tty->low_latency) |
486 | flush_to_ldisc(&tty->buf.work.work); | 487 | flush_to_ldisc(&tty->buf.work.work); |
487 | else | 488 | else |
488 | schedule_delayed_work(&tty->buf.work, 1); | 489 | schedule_delayed_work(&tty->buf.work, 1); |
490 | #else | ||
491 | flush_to_ldisc(&tty->buf.work.work); | ||
492 | #endif | ||
489 | } | 493 | } |
490 | EXPORT_SYMBOL(tty_flip_buffer_push); | 494 | EXPORT_SYMBOL(tty_flip_buffer_push); |
491 | 495 | ||
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index a1f403ec9213..d4d69e155afe 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
@@ -1595,7 +1595,12 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id) | |||
1595 | 1595 | ||
1596 | l = l->next; | 1596 | l = l->next; |
1597 | 1597 | ||
1598 | if (l == i->head && pass_counter++ > PASS_LIMIT) { | 1598 | /* |
1599 | * On preempt-rt we can be preempted and run in our | ||
1600 | * own thread. | ||
1601 | */ | ||
1602 | if (!preempt_rt() && l == i->head && | ||
1603 | pass_counter++ > PASS_LIMIT) { | ||
1599 | /* If we hit this, we're dead. */ | 1604 | /* If we hit this, we're dead. */ |
1600 | printk(KERN_ERR "serial8250: too much work for " | 1605 | printk(KERN_ERR "serial8250: too much work for " |
1601 | "irq%d\n", irq); | 1606 | "irq%d\n", irq); |