|
@@ -1908,14 +1908,22 @@ static int serial8250_startup(struct uart_port *port)
|
|
|
* kick the UART on a regular basis.
|
|
|
*/
|
|
|
if (!(iir1 & UART_IIR_NO_INT) && (iir & UART_IIR_NO_INT)) {
|
|
|
+ up->bugs |= UART_BUG_THRE;
|
|
|
pr_debug("ttyS%d - using backup timer\n", port->line);
|
|
|
- up->timer.function = serial8250_backup_timeout;
|
|
|
- up->timer.data = (unsigned long)up;
|
|
|
- mod_timer(&up->timer, jiffies +
|
|
|
- poll_timeout(up->port.timeout) + HZ / 5);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * The above check will only give an accurate result the first time
|
|
|
+ * the port is opened so this value needs to be preserved.
|
|
|
+ */
|
|
|
+ if (up->bugs & UART_BUG_THRE) {
|
|
|
+ up->timer.function = serial8250_backup_timeout;
|
|
|
+ up->timer.data = (unsigned long)up;
|
|
|
+ mod_timer(&up->timer, jiffies +
|
|
|
+ poll_timeout(up->port.timeout) + HZ / 5);
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* If the "interrupt" for this port doesn't correspond with any
|
|
|
* hardware interrupt, we use a timer-based system. The original
|