pty: Don't claim slave's ctrl_lock for master's packet mode
[firefly-linux-kernel-4.4.55.git] / drivers / tty / n_tty.c
index 89c4cee253e34419006b670089cc54b0257dde52..cd725cc6e21e0b340a79d5780ec9de31c5ed6b39 100644 (file)
@@ -351,13 +351,13 @@ static void n_tty_packet_mode_flush(struct tty_struct *tty)
 {
        unsigned long flags;
 
-       spin_lock_irqsave(&tty->ctrl_lock, flags);
        if (tty->link->packet) {
+               spin_lock_irqsave(&tty->ctrl_lock, flags);
                tty->ctrl_status |= TIOCPKT_FLUSHREAD;
+               spin_unlock_irqrestore(&tty->ctrl_lock, flags);
                if (waitqueue_active(&tty->link->read_wait))
                        wake_up_interruptible(&tty->link->read_wait);
        }
-       spin_unlock_irqrestore(&tty->ctrl_lock, flags);
 }
 
 /**
@@ -2128,7 +2128,6 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
        int minimum, time;
        ssize_t retval = 0;
        long timeout;
-       unsigned long flags;
        int packet;
 
        c = job_control(tty, file);
@@ -2174,10 +2173,10 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
                        unsigned char cs;
                        if (b != buf)
                                break;
-                       spin_lock_irqsave(&tty->link->ctrl_lock, flags);
+                       spin_lock_irq(&tty->link->ctrl_lock);
                        cs = tty->link->ctrl_status;
                        tty->link->ctrl_status = 0;
-                       spin_unlock_irqrestore(&tty->link->ctrl_lock, flags);
+                       spin_unlock_irq(&tty->link->ctrl_lock);
                        if (tty_put_user(tty, cs, b++)) {
                                retval = -EFAULT;
                                b--;