summaryrefslogtreecommitdiff
path: root/drivers/tty/serial/8250.c
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-11-23 01:41:24 +0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-11-27 08:11:20 +0400
commit448ac154c957c4580531fa0c8f2045816fe2f0e7 (patch)
tree45b5f8c1108baa78841b9fc59a9afdfd67a6c712 /drivers/tty/serial/8250.c
parentd0758a285caaf86192cdb22136a5eb84ed72f276 (diff)
downloadlinux-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.c4
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)