TTY: clean up port drain-delay handling
Move port drain-delay handling to a separate function. Signed-off-by: Johan Hovold <jhovold@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
957dacaee5
commit
b74414f5f3
|
@ -441,6 +441,20 @@ int tty_port_block_til_ready(struct tty_port *port,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(tty_port_block_til_ready);
|
EXPORT_SYMBOL(tty_port_block_til_ready);
|
||||||
|
|
||||||
|
static void tty_port_drain_delay(struct tty_port *port, struct tty_struct *tty)
|
||||||
|
{
|
||||||
|
unsigned int bps = tty_get_baud_rate(tty);
|
||||||
|
long timeout;
|
||||||
|
|
||||||
|
if (bps > 1200) {
|
||||||
|
timeout = (HZ * 10 * port->drain_delay) / bps;
|
||||||
|
timeout = max_t(long, timeout, HZ / 10);
|
||||||
|
} else {
|
||||||
|
timeout = 2 * HZ;
|
||||||
|
}
|
||||||
|
schedule_timeout_interruptible(timeout);
|
||||||
|
}
|
||||||
|
|
||||||
int tty_port_close_start(struct tty_port *port,
|
int tty_port_close_start(struct tty_port *port,
|
||||||
struct tty_struct *tty, struct file *filp)
|
struct tty_struct *tty, struct file *filp)
|
||||||
{
|
{
|
||||||
|
@ -479,17 +493,8 @@ int tty_port_close_start(struct tty_port *port,
|
||||||
if (test_bit(ASYNCB_INITIALIZED, &port->flags) &&
|
if (test_bit(ASYNCB_INITIALIZED, &port->flags) &&
|
||||||
port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
|
port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
|
||||||
tty_wait_until_sent_from_close(tty, port->closing_wait);
|
tty_wait_until_sent_from_close(tty, port->closing_wait);
|
||||||
if (port->drain_delay) {
|
if (port->drain_delay)
|
||||||
unsigned int bps = tty_get_baud_rate(tty);
|
tty_port_drain_delay(port, tty);
|
||||||
long timeout;
|
|
||||||
|
|
||||||
if (bps > 1200)
|
|
||||||
timeout = max_t(long,
|
|
||||||
(HZ * 10 * port->drain_delay) / bps, HZ / 10);
|
|
||||||
else
|
|
||||||
timeout = 2 * HZ;
|
|
||||||
schedule_timeout_interruptible(timeout);
|
|
||||||
}
|
|
||||||
/* Flush the ldisc buffering */
|
/* Flush the ldisc buffering */
|
||||||
tty_ldisc_flush(tty);
|
tty_ldisc_flush(tty);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue