tty: pty - Move TIOCPKT handling into pty.c
authorCyrill Gorcunov <gorcunov@openvz.org>
Wed, 24 Oct 2012 19:43:20 +0000 (23:43 +0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Oct 2012 19:07:18 +0000 (12:07 -0700)
Since this ioctl is for pty devices only move it to pty.c.

v2:
 - drop PTY_TYPE_MASTER test since it's master peer
   ioctl anyway (by jslaby@)

Suggested-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Pavel Emelyanov <xemul@parallels.com>
CC: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/pty.c
drivers/tty/tty_ioctl.c

index 4219f040adb8ff55f35109accc5eea5e55ef2366..df3c64272d21561485dbd0feb1a838f88e79f7f3 100644 (file)
@@ -171,6 +171,28 @@ static int pty_set_lock(struct tty_struct *tty, int __user *arg)
        return 0;
 }
 
+/* Set the packet mode on a pty */
+static int pty_set_pktmode(struct tty_struct *tty, int __user *arg)
+{
+       unsigned long flags;
+       int pktmode;
+
+       if (get_user(pktmode, arg))
+               return -EFAULT;
+
+       spin_lock_irqsave(&tty->ctrl_lock, flags);
+       if (pktmode) {
+               if (!tty->packet) {
+                       tty->packet = 1;
+                       tty->link->ctrl_status = 0;
+               }
+       } else
+               tty->packet = 0;
+       spin_unlock_irqrestore(&tty->ctrl_lock, flags);
+
+       return 0;
+}
+
 /* Send a signal to the slave */
 static int pty_signal(struct tty_struct *tty, int sig)
 {
@@ -398,6 +420,8 @@ static int pty_bsd_ioctl(struct tty_struct *tty,
        switch (cmd) {
        case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
                return pty_set_lock(tty, (int __user *) arg);
+       case TIOCPKT: /* Set PT packet mode */
+               return pty_set_pktmode(tty, (int __user *)arg);
        case TIOCSIG:    /* Send signal to other side of pty */
                return pty_signal(tty, (int) arg);
        }
@@ -512,6 +536,8 @@ static int pty_unix98_ioctl(struct tty_struct *tty,
        switch (cmd) {
        case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */
                return pty_set_lock(tty, (int __user *)arg);
+       case TIOCPKT: /* Set PT packet mode */
+               return pty_set_pktmode(tty, (int __user *)arg);
        case TIOCGPTN: /* Get PT Number */
                return put_user(tty->index, (unsigned int __user *)arg);
        case TIOCSIG:    /* Send signal to other side of pty */
index 12b1fa0f4f867ed014d7a96eac79ccae76053c6d..8481b29d5b3a70d015bcc3f0afcb6a2cfdbc02e8 100644 (file)
@@ -1118,7 +1118,6 @@ EXPORT_SYMBOL_GPL(tty_perform_flush);
 int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
                       unsigned int cmd, unsigned long arg)
 {
-       unsigned long flags;
        int retval;
 
        switch (cmd) {
@@ -1153,26 +1152,6 @@ int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
                return 0;
        case TCFLSH:
                return tty_perform_flush(tty, arg);
-       case TIOCPKT:
-       {
-               int pktmode;
-
-               if (tty->driver->type != TTY_DRIVER_TYPE_PTY ||
-                   tty->driver->subtype != PTY_TYPE_MASTER)
-                       return -ENOTTY;
-               if (get_user(pktmode, (int __user *) arg))
-                       return -EFAULT;
-               spin_lock_irqsave(&tty->ctrl_lock, flags);
-               if (pktmode) {
-                       if (!tty->packet) {
-                               tty->packet = 1;
-                               tty->link->ctrl_status = 0;
-                       }
-               } else
-                       tty->packet = 0;
-               spin_unlock_irqrestore(&tty->ctrl_lock, flags);
-               return 0;
-       }
        default:
                /* Try the mode commands */
                return tty_mode_ioctl(tty, file, cmd, arg);