aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/synclinkmp.c
diff options
context:
space:
mode:
authorPeter Hurley <peter@hurleysoftware.com>2015-10-10 16:00:52 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-10-18 00:11:29 -0400
commitfef062cbf2a90fd926a6fff9eb06dde1b699f1b3 (patch)
tree5f2cc71db26e745beb483d96b0005b6d9cdd2714 /drivers/tty/synclinkmp.c
parent79c1faa4511e78380cd643dac88a775062a08bc0 (diff)
tty: Remove ASYNC_CLOSING checks in open()/hangup() methods
Since at least before 2.6.30, tty drivers that do not drop the tty lock while closing cannot observe ASYNC_CLOSING set while holding the tty lock; this includes the tty driver's open() and hangup() methods, since the tty core calls these methods holding the tty lock. For these drivers, waiting for ASYNC_CLOSING to clear while opening is not required, since this condition cannot occur. Similarly, even when the open() method drops and reacquires the tty lock after blocking, ASYNC_CLOSING cannot be set (again, for drivers that do not drop the tty lock while closing). Now that tty port drivers no longer drop the tty lock while closing (since 'tty: Remove tty_wait_until_sent_from_close()'), the same conditions apply: waiting for ASYNC_CLOSING to clear while opening is not required, nor is re-checking ASYNC_CLOSING after dropping and reacquiring the tty lock while blocking (eg., in *_block_til_ready()). Note: The ASYNC_CLOSING flag state is still maintained since several bitrotting drivers use it for (dubious) other purposes. Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/synclinkmp.c')
-rw-r--r--drivers/tty/synclinkmp.c14
1 files changed, 2 insertions, 12 deletions
diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c
index 08633a8139ff..fb00a06dfa4b 100644
--- a/drivers/tty/synclinkmp.c
+++ b/drivers/tty/synclinkmp.c
@@ -752,15 +752,6 @@ static int open(struct tty_struct *tty, struct file *filp)
752 printk("%s(%d):%s open(), old ref count = %d\n", 752 printk("%s(%d):%s open(), old ref count = %d\n",
753 __FILE__,__LINE__,tty->driver->name, info->port.count); 753 __FILE__,__LINE__,tty->driver->name, info->port.count);
754 754
755 /* If port is closing, signal caller to try again */
756 if (info->port.flags & ASYNC_CLOSING){
757 wait_event_interruptible_tty(tty, info->port.close_wait,
758 !(info->port.flags & ASYNC_CLOSING));
759 retval = ((info->port.flags & ASYNC_HUP_NOTIFY) ?
760 -EAGAIN : -ERESTARTSYS);
761 goto cleanup;
762 }
763
764 info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0; 755 info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
765 756
766 spin_lock_irqsave(&info->netlock, flags); 757 spin_lock_irqsave(&info->netlock, flags);
@@ -3341,9 +3332,8 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
3341 } 3332 }
3342 3333
3343 cd = tty_port_carrier_raised(port); 3334 cd = tty_port_carrier_raised(port);
3344 3335 if (do_clocal || cd)
3345 if (!(port->flags & ASYNC_CLOSING) && (do_clocal || cd)) 3336 break;
3346 break;
3347 3337
3348 if (signal_pending(current)) { 3338 if (signal_pending(current)) {
3349 retval = -ERESTARTSYS; 3339 retval = -ERESTARTSYS;