diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-11-23 01:41:24 +0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-11-27 08:11:20 +0400 |
commit | 448ac154c957c4580531fa0c8f2045816fe2f0e7 (patch) | |
tree | 45b5f8c1108baa78841b9fc59a9afdfd67a6c712 /drivers/tty/serial/8250.c | |
parent | d0758a285caaf86192cdb22136a5eb84ed72f276 (diff) | |
download | linux-448ac154c957c4580531fa0c8f2045816fe2f0e7.tar.xz |
serial/8250_pci: setup-quirk workaround for the kt serial controller
Workaround dropped notifications in the iir register. Prevent reads
coincident with new interrupt notifications by reading the iir at most
once per interrupt.
Reported-by: Nhan H Mai <nhan.h.mai@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/tty/serial/8250.c')
-rw-r--r-- | drivers/tty/serial/8250.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c index eeadf1b8e093..3a8e5bfe17e2 100644 --- a/drivers/tty/serial/8250.c +++ b/drivers/tty/serial/8250.c @@ -1619,11 +1619,13 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id) do { struct uart_8250_port *up; struct uart_port *port; + bool skip; up = list_entry(l, struct uart_8250_port, list); port = &up->port; + skip = pass_counter && up->port.flags & UPF_IIR_ONCE; - if (port->handle_irq(port)) { + if (!skip && port->handle_irq(port)) { handled = 1; end = NULL; } else if (end == NULL) |