[SERIAL] Fix clocal wakeup problem
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Sat, 7 Jan 2006 23:11:23 +0000 (23:11 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 7 Jan 2006 23:11:23 +0000 (23:11 +0000)
Jim Alexander reported a problem where "if one calls open() in
blocking mode with CLOCAL off, the 8250.c driver under the 2.6
kernel (or at least 2.6.8 and 2.6.10) does not wake up the
blocked process when DCD is asserted."

Fix this by enabling modem status interrupts immediately before
we read the carrier detect status.

Thanks to Jim for reporting the problem and testing the fix.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/serial/serial_core.c

index 34c576dfad8dbd08290f023baeafc3b0941cd7ff..9589509fc5bd7b48584ececb3933cbed97b78bd2 100644 (file)
@@ -1440,6 +1440,7 @@ uart_block_til_ready(struct file *filp, struct uart_state *state)
                 * modem is ready for us.
                 */
                spin_lock_irq(&port->lock);
+               port->ops->enable_ms(port);
                mctrl = port->ops->get_mctrl(port);
                spin_unlock_irq(&port->lock);
                if (mctrl & TIOCM_CAR)