TTY: use tty_wait_until_sent_from_close in other drivers
Let's use the newly added helper to avoid stalls in drivers which are not yet ported to tty_port helpers. Those which are broken (call tty_wait_until_sent with irqs disabled) are left untouched. They are in a deeper trouble than we are trying to solve here. This includes amiserial, 68328serial, 68360serial and crisv10. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
424cc03912
commit
0b058353ab
|
@ -1693,7 +1693,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
|
||||||
* line status register.
|
* line status register.
|
||||||
*/
|
*/
|
||||||
if (info->flags & ISDN_ASYNC_INITIALIZED) {
|
if (info->flags & ISDN_ASYNC_INITIALIZED) {
|
||||||
tty_wait_until_sent(tty, 3000); /* 30 seconds timeout */
|
tty_wait_until_sent_from_close(tty, 3000); /* 30 seconds timeout */
|
||||||
/*
|
/*
|
||||||
* Before we drop DTR, make sure the UART transmitter
|
* Before we drop DTR, make sure the UART transmitter
|
||||||
* has completely drained; this is especially
|
* has completely drained; this is especially
|
||||||
|
|
|
@ -388,7 +388,7 @@ static void hvc_close(struct tty_struct *tty, struct file * filp)
|
||||||
* there is no buffered data otherwise sleeps on a wait queue
|
* there is no buffered data otherwise sleeps on a wait queue
|
||||||
* waking periodically to check chars_in_buffer().
|
* waking periodically to check chars_in_buffer().
|
||||||
*/
|
*/
|
||||||
tty_wait_until_sent(tty, HVC_CLOSE_WAIT);
|
tty_wait_until_sent_from_close(tty, HVC_CLOSE_WAIT);
|
||||||
} else {
|
} else {
|
||||||
if (hp->count < 0)
|
if (hp->count < 0)
|
||||||
printk(KERN_ERR "hvc_close %X: oops, count is %d\n",
|
printk(KERN_ERR "hvc_close %X: oops, count is %d\n",
|
||||||
|
|
|
@ -1237,7 +1237,7 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp)
|
||||||
irq = hvcsd->vdev->irq;
|
irq = hvcsd->vdev->irq;
|
||||||
spin_unlock_irqrestore(&hvcsd->lock, flags);
|
spin_unlock_irqrestore(&hvcsd->lock, flags);
|
||||||
|
|
||||||
tty_wait_until_sent(tty, HVCS_CLOSE_WAIT);
|
tty_wait_until_sent_from_close(tty, HVCS_CLOSE_WAIT);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This line is important because it tells hvcs_open that this
|
* This line is important because it tells hvcs_open that this
|
||||||
|
|
|
@ -1292,7 +1292,8 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
|
||||||
spin_unlock_irqrestore(&port->lock, flags);
|
spin_unlock_irqrestore(&port->lock, flags);
|
||||||
|
|
||||||
if (port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
|
if (port->closing_wait != ASYNC_CLOSING_WAIT_NONE)
|
||||||
tty_wait_until_sent(tty, msecs_to_jiffies(port->closing_wait));
|
tty_wait_until_sent_from_close(tty,
|
||||||
|
msecs_to_jiffies(port->closing_wait));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* At this point, we stop accepting input. To do this, we
|
* At this point, we stop accepting input. To do this, we
|
||||||
|
|
|
@ -551,7 +551,7 @@ static void ircomm_tty_close(struct tty_struct *tty, struct file *filp)
|
||||||
*/
|
*/
|
||||||
tty->closing = 1;
|
tty->closing = 1;
|
||||||
if (self->closing_wait != ASYNC_CLOSING_WAIT_NONE)
|
if (self->closing_wait != ASYNC_CLOSING_WAIT_NONE)
|
||||||
tty_wait_until_sent(tty, self->closing_wait);
|
tty_wait_until_sent_from_close(tty, self->closing_wait);
|
||||||
|
|
||||||
ircomm_tty_shutdown(self);
|
ircomm_tty_shutdown(self);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user