| From 6f7a0cbda97ea6ac36b334a2639275f60f830390 Mon Sep 17 00:00:00 2001 |
| From: Paul Gortmaker <paul.gortmaker@windriver.com> |
| Date: Sun, 4 Dec 2011 18:42:21 -0500 |
| Subject: serial: make 8250 timeout use the specified IRQ handler |
| |
| The current 8250 timeout code duplicates the code path in |
| serial8250_default_handle_irq and then serial8250_handle_irq |
| i.e. reading iir, check for IIR_NO_INT, and then calling |
| serial8250_handle_port. |
| |
| So the immediate thought is to replace the duplicated code |
| with a call to serial8250_default_handle_irq. |
| |
| But this highlights a problem. We let 8250 driver variants |
| use their own IRQ handler via specifying their own custom |
| ->handle_irq, but in the event of a timeout, we ignore their |
| handler and implicitly run serial8250_default_handle_irq instead. |
| |
| So, go through the struct to get ->handle_irq and call that, |
| which for most will still be serial8250_default_handle_irq. |
| |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| Acked-by: Alan Cox <alan@linux.intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| (cherry picked from commit a0431476e95d18bb65349e7bcf98eb10b5ad00b9) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| drivers/tty/serial/8250.c | 5 +---- |
| 1 file changed, 1 insertion(+), 4 deletions(-) |
| |
| diff --git a/drivers/tty/serial/8250.c b/drivers/tty/serial/8250.c |
| index d759fcc..a5c6c7d 100644 |
| --- a/drivers/tty/serial/8250.c |
| +++ b/drivers/tty/serial/8250.c |
| @@ -1738,11 +1738,8 @@ static void serial_unlink_irq_chain(struct uart_8250_port *up) |
| static void serial8250_timeout(unsigned long data) |
| { |
| struct uart_8250_port *up = (struct uart_8250_port *)data; |
| - unsigned int iir; |
| |
| - iir = serial_in(up, UART_IIR); |
| - if (!(iir & UART_IIR_NO_INT)) |
| - serial8250_handle_port(up); |
| + up->port.handle_irq(&up->port); |
| mod_timer(&up->timer, jiffies + uart_poll_timeout(&up->port)); |
| } |
| |
| -- |
| 1.7.10.1.362.g242cab3 |
| |