Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b058353 authored by Jiri Slaby's avatar Jiri Slaby Committed by Greg Kroah-Hartman
Browse files

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: default avatarJiri Slaby <jslaby@suse.cz>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 424cc039
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1693,7 +1693,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
	 * line status register.
	 */
	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
		 * has completely drained; this is especially
+1 −1
Original line number Diff line number Diff line
@@ -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
		 * 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 {
		if (hp->count < 0)
			printk(KERN_ERR "hvc_close %X: oops, count is %d\n",
+1 −1
Original line number Diff line number Diff line
@@ -1237,7 +1237,7 @@ static void hvcs_close(struct tty_struct *tty, struct file *filp)
		irq = hvcsd->vdev->irq;
		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
+2 −1
Original line number Diff line number Diff line
@@ -1292,7 +1292,8 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
	spin_unlock_irqrestore(&port->lock, flags);

	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
+1 −1
Original line number Diff line number Diff line
@@ -551,7 +551,7 @@ static void ircomm_tty_close(struct tty_struct *tty, struct file *filp)
	 */
	tty->closing = 1;
	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);