* [patch 0/2] Add get- ioctls to fetch some bits from tty/pty status @ 2012-09-27 16:59 Cyrill Gorcunov 2012-09-27 16:59 ` [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c Cyrill Gorcunov 2012-09-27 17:00 ` [patch 2/2] tty: Add get- ioctls to fetch tty status v2 Cyrill Gorcunov 0 siblings, 2 replies; 12+ messages in thread From: Cyrill Gorcunov @ 2012-09-27 16:59 UTC (permalink / raw) To: linux-kernel; +Cc: alan, hpa, gregkh, xemul, jslaby For c/r we need some additional bits to fetch from terminal connection status to be able to recreate it on restore. This series adds appropriate ioctls. Please review, i've tested them locally but still. Cyrill ^ permalink raw reply [flat|nested] 12+ messages in thread
* [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c 2012-09-27 16:59 [patch 0/2] Add get- ioctls to fetch some bits from tty/pty status Cyrill Gorcunov @ 2012-09-27 16:59 ` Cyrill Gorcunov 2012-09-27 17:33 ` Jiri Slaby 2012-09-27 17:00 ` [patch 2/2] tty: Add get- ioctls to fetch tty status v2 Cyrill Gorcunov 1 sibling, 1 reply; 12+ messages in thread From: Cyrill Gorcunov @ 2012-09-27 16:59 UTC (permalink / raw) To: linux-kernel; +Cc: alan, hpa, gregkh, xemul, jslaby, Cyrill Gorcunov [-- Attachment #1: tty-move-pktmode-set --] [-- Type: text/plain, Size: 3030 bytes --] Since this ioctl is for pty devices only move it to pty.c. 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> CC: Pavel Emelyanov <xemul@parallels.com> CC: Jiri Slaby <jslaby@suse.cz> --- drivers/tty/pty.c | 29 +++++++++++++++++++++++++++++ drivers/tty/tty_ioctl.c | 20 -------------------- 2 files changed, 29 insertions(+), 20 deletions(-) Index: tty.git/drivers/tty/pty.c =================================================================== --- tty.git.orig/drivers/tty/pty.c +++ tty.git/drivers/tty/pty.c @@ -174,6 +174,31 @@ static int pty_set_lock(struct tty_struc 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 (tty->driver->subtype != PTY_TYPE_MASTER) + return -ENOTTY; + + 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) { @@ -393,6 +418,8 @@ static int pty_bsd_ioctl(struct tty_stru 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); } @@ -507,6 +534,8 @@ static int pty_unix98_ioctl(struct tty_s 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: tty.git/drivers/tty/tty_ioctl.c =================================================================== --- tty.git.orig/drivers/tty/tty_ioctl.c +++ tty.git/drivers/tty/tty_ioctl.c @@ -1153,26 +1153,6 @@ int n_tty_ioctl_helper(struct tty_struct 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); ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c 2012-09-27 16:59 ` [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c Cyrill Gorcunov @ 2012-09-27 17:33 ` Jiri Slaby 2012-09-27 17:37 ` Cyrill Gorcunov 2012-09-27 17:40 ` Cyrill Gorcunov 0 siblings, 2 replies; 12+ messages in thread From: Jiri Slaby @ 2012-09-27 17:33 UTC (permalink / raw) To: Cyrill Gorcunov; +Cc: linux-kernel, alan, hpa, gregkh, xemul On 09/27/2012 06:59 PM, Cyrill Gorcunov wrote: > --- tty.git.orig/drivers/tty/pty.c > +++ tty.git/drivers/tty/pty.c > @@ -174,6 +174,31 @@ static int pty_set_lock(struct tty_struc > 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 (tty->driver->subtype != PTY_TYPE_MASTER) > + return -ENOTTY; Hi! This check is not needed as the ioctls are master-only. -- js suse labs ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c 2012-09-27 17:33 ` Jiri Slaby @ 2012-09-27 17:37 ` Cyrill Gorcunov 2012-09-27 18:14 ` Greg KH 2012-09-27 17:40 ` Cyrill Gorcunov 1 sibling, 1 reply; 12+ messages in thread From: Cyrill Gorcunov @ 2012-09-27 17:37 UTC (permalink / raw) To: Jiri Slaby; +Cc: linux-kernel, alan, hpa, gregkh, xemul On Thu, Sep 27, 2012 at 07:33:27PM +0200, Jiri Slaby wrote: > > Hi! > > This check is not needed as the ioctls are master-only. Hi, thanks, Jiri, i'll update (was hurry to provide patches so missed this ;) Cyrill ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c 2012-09-27 17:37 ` Cyrill Gorcunov @ 2012-09-27 18:14 ` Greg KH 2012-09-27 18:18 ` Cyrill Gorcunov 0 siblings, 1 reply; 12+ messages in thread From: Greg KH @ 2012-09-27 18:14 UTC (permalink / raw) To: Cyrill Gorcunov; +Cc: Jiri Slaby, linux-kernel, alan, hpa, xemul On Thu, Sep 27, 2012 at 09:37:14PM +0400, Cyrill Gorcunov wrote: > On Thu, Sep 27, 2012 at 07:33:27PM +0200, Jiri Slaby wrote: > > > > Hi! > > > > This check is not needed as the ioctls are master-only. > > Hi, thanks, Jiri, i'll update (was hurry to provide patches > so missed this ;) Don't rush, anything you do here will be for 3.8, not 3.7, it's too late for that, the tty tree already has lots of changes for 3.7. So take your time please. greg k-h ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c 2012-09-27 18:14 ` Greg KH @ 2012-09-27 18:18 ` Cyrill Gorcunov 0 siblings, 0 replies; 12+ messages in thread From: Cyrill Gorcunov @ 2012-09-27 18:18 UTC (permalink / raw) To: Greg KH; +Cc: Jiri Slaby, linux-kernel, alan, hpa, xemul On Thu, Sep 27, 2012 at 11:14:17AM -0700, Greg KH wrote: > On Thu, Sep 27, 2012 at 09:37:14PM +0400, Cyrill Gorcunov wrote: > > On Thu, Sep 27, 2012 at 07:33:27PM +0200, Jiri Slaby wrote: > > > > > > Hi! > > > > > > This check is not needed as the ioctls are master-only. > > > > Hi, thanks, Jiri, i'll update (was hurry to provide patches > > so missed this ;) > > Don't rush, anything you do here will be for 3.8, not 3.7, it's too late > for that, the tty tree already has lots of changes for 3.7. > > So take your time please. Sure, patching other archs ioctls is not as simple as I thought, need to recheck everything and I think better to do all this in 3 patches - move ptkmode setting into pty - introduce new ioctl codes (including patching other archs) - add real handlers for this new ioctl codes this will help for bisection. Cyrill ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c 2012-09-27 17:33 ` Jiri Slaby 2012-09-27 17:37 ` Cyrill Gorcunov @ 2012-09-27 17:40 ` Cyrill Gorcunov 1 sibling, 0 replies; 12+ messages in thread From: Cyrill Gorcunov @ 2012-09-27 17:40 UTC (permalink / raw) To: Jiri Slaby; +Cc: linux-kernel, alan, hpa, gregkh, xemul On Thu, Sep 27, 2012 at 07:33:27PM +0200, Jiri Slaby wrote: > > + > > + if (tty->driver->subtype != PTY_TYPE_MASTER) > > + return -ENOTTY; > > Hi! > > This check is not needed as the ioctls are master-only. Here is updated version, thanks! --- From: Cyrill Gorcunov <gorcunov@openvz.org> Subject: tty: pty - Move TIOCPKT handling into pty.c 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> CC: Pavel Emelyanov <xemul@parallels.com> CC: Jiri Slaby <jslaby@suse.cz> --- drivers/tty/pty.c | 26 ++++++++++++++++++++++++++ drivers/tty/tty_ioctl.c | 20 -------------------- 2 files changed, 26 insertions(+), 20 deletions(-) Index: tty.git/drivers/tty/pty.c =================================================================== --- tty.git.orig/drivers/tty/pty.c +++ tty.git/drivers/tty/pty.c @@ -174,6 +174,28 @@ static int pty_set_lock(struct tty_struc 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) { @@ -393,6 +415,8 @@ static int pty_bsd_ioctl(struct tty_stru 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); } @@ -507,6 +531,8 @@ static int pty_unix98_ioctl(struct tty_s 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: tty.git/drivers/tty/tty_ioctl.c =================================================================== --- tty.git.orig/drivers/tty/tty_ioctl.c +++ tty.git/drivers/tty/tty_ioctl.c @@ -1153,26 +1153,6 @@ int n_tty_ioctl_helper(struct tty_struct 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); ^ permalink raw reply [flat|nested] 12+ messages in thread
* [patch 2/2] tty: Add get- ioctls to fetch tty status v2 2012-09-27 16:59 [patch 0/2] Add get- ioctls to fetch some bits from tty/pty status Cyrill Gorcunov 2012-09-27 16:59 ` [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c Cyrill Gorcunov @ 2012-09-27 17:00 ` Cyrill Gorcunov 2012-09-27 17:42 ` Cyrill Gorcunov 2012-09-27 17:49 ` Jiri Slaby 1 sibling, 2 replies; 12+ messages in thread From: Cyrill Gorcunov @ 2012-09-27 17:00 UTC (permalink / raw) To: linux-kernel; +Cc: alan, hpa, gregkh, xemul, jslaby, Cyrill Gorcunov [-- Attachment #1: tty-fetch-flags-5 --] [-- Type: text/plain, Size: 4968 bytes --] For checkpoint/restore we need to know if tty has exclusive or packet mode set, as well as if pty is currently locked. Just to be able to restore this characteristics. For this sake the following ioctl codes are introduced - TIOCGPKT to get packet mode state - TIOCGPTLCK to get Pty locked state - TIOCGEXCL to get Exclusive mode state Note this ioctls are a bit unsafe in terms of data obtained consistency. The tty characteristics might be changed right after ioctl complete. Keep it in mind and use this ioctl carefully. v2: - Use TIOC prefix for ioctl codes (by jslaby@) Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> CC: Alan Cox <alan@lxorguk.ukuu.org.uk> CC: "H. Peter Anvin" <hpa@zytor.com> CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org> CC: Pavel Emelyanov <xemul@parallels.com> CC: Jiri Slaby <jslaby@suse.cz> --- drivers/tty/pty.c | 35 +++++++++++++++++++++++++++++++++++ drivers/tty/tty_io.c | 7 +++++++ fs/compat_ioctl.c | 3 +++ include/asm-generic/ioctls.h | 3 +++ 4 files changed, 48 insertions(+) Index: tty.git/drivers/tty/pty.c =================================================================== --- tty.git.orig/drivers/tty/pty.c +++ tty.git/drivers/tty/pty.c @@ -174,6 +174,14 @@ static int pty_set_lock(struct tty_struc return 0; } +static int pty_get_lock(struct tty_struct *tty, int __user *arg) +{ + int locked = test_bit(TTY_PTY_LOCK, &tty->flags); + if (put_user(locked, arg)) + return -EFAULT; + return 0; +} + /* Set the packet mode on a pty */ static int pty_set_pktmode(struct tty_struct *tty, int __user *arg) { @@ -199,6 +207,25 @@ static int pty_set_pktmode(struct tty_st return 0; } +/* Get the packet mode of a pty */ +static int pty_get_pktmode(struct tty_struct *tty, int __user *arg) +{ + unsigned long flags; + int pktmode; + + if (tty->driver->subtype != PTY_TYPE_MASTER) + return -ENOTTY; + + spin_lock_irqsave(&tty->ctrl_lock, flags); + pktmode = tty->packet; + spin_unlock_irqrestore(&tty->ctrl_lock, flags); + + if (put_user(pktmode, arg)) + return -EFAULT; + + return 0; +} + /* Send a signal to the slave */ static int pty_signal(struct tty_struct *tty, int sig) { @@ -418,8 +445,12 @@ static int pty_bsd_ioctl(struct tty_stru switch (cmd) { case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */ return pty_set_lock(tty, (int __user *) arg); + case TIOCGPTLCK: /* Get PT Lock status */ + return pty_get_lock(tty, (int __user *)arg); case TIOCPKT: /* Set PT packet mode */ return pty_set_pktmode(tty, (int __user *)arg); + case TIOCGPKT: /* Get PT packet mode */ + return pty_get_pktmode(tty, (int __user *)arg); case TIOCSIG: /* Send signal to other side of pty */ return pty_signal(tty, (int) arg); } @@ -534,8 +565,12 @@ static int pty_unix98_ioctl(struct tty_s switch (cmd) { case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */ return pty_set_lock(tty, (int __user *)arg); + case TIOCGPTLCK: /* Get PT Lock status */ + return pty_get_lock(tty, (int __user *)arg); case TIOCPKT: /* Set PT packet mode */ return pty_set_pktmode(tty, (int __user *)arg); + case TIOCGPKT: /* Get PT packet mode */ + return pty_get_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: tty.git/drivers/tty/tty_io.c =================================================================== --- tty.git.orig/drivers/tty/tty_io.c +++ tty.git/drivers/tty/tty_io.c @@ -2693,6 +2693,13 @@ long tty_ioctl(struct file *file, unsign case TIOCNXCL: clear_bit(TTY_EXCLUSIVE, &tty->flags); return 0; + case TIOCGEXCL: + { + int excl = test_bit(TTY_EXCLUSIVE, &tty->flags); + if (put_user(excl, (int __user *)p)) + return -EFAULT; + return 0; + } case TIOCNOTTY: if (current->signal->tty != tty) return -ENOTTY; Index: tty.git/fs/compat_ioctl.c =================================================================== --- tty.git.orig/fs/compat_ioctl.c +++ tty.git/fs/compat_ioctl.c @@ -842,6 +842,9 @@ COMPATIBLE_IOCTL(TIOCGDEV) COMPATIBLE_IOCTL(TIOCCBRK) COMPATIBLE_IOCTL(TIOCGSID) COMPATIBLE_IOCTL(TIOCGICOUNT) +COMPATIBLE_IOCTL(TIOCGPKT) +COMPATIBLE_IOCTL(TIOCGPTLCK) +COMPATIBLE_IOCTL(TIOCGEXCL) /* Little t */ COMPATIBLE_IOCTL(TIOCGETD) COMPATIBLE_IOCTL(TIOCSETD) Index: tty.git/include/asm-generic/ioctls.h =================================================================== --- tty.git.orig/include/asm-generic/ioctls.h +++ tty.git/include/asm-generic/ioctls.h @@ -74,6 +74,9 @@ #define TCSETXW 0x5435 #define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */ #define TIOCVHANGUP 0x5437 +#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ +#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ +#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ #define FIONCLEX 0x5450 #define FIOCLEX 0x5451 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 2/2] tty: Add get- ioctls to fetch tty status v2 2012-09-27 17:00 ` [patch 2/2] tty: Add get- ioctls to fetch tty status v2 Cyrill Gorcunov @ 2012-09-27 17:42 ` Cyrill Gorcunov 2012-09-27 17:49 ` Jiri Slaby 1 sibling, 0 replies; 12+ messages in thread From: Cyrill Gorcunov @ 2012-09-27 17:42 UTC (permalink / raw) To: linux-kernel; +Cc: alan, hpa, gregkh, xemul, jslaby On Thu, Sep 27, 2012 at 09:00:00PM +0400, Cyrill Gorcunov wrote: > For checkpoint/restore we need to know if tty has > exclusive or packet mode set, as well as if pty > is currently locked. Just to be able to restore > this characteristics. Here is an updated version with redundand code ripped off (by jslaby@) --- From: Cyrill Gorcunov <gorcunov@openvz.org> Subject: tty: Add get- ioctls to fetch tty status v2 For checkpoint/restore we need to know if tty has exclusive or packet mode set, as well as if pty is currently locked. Just to be able to restore this characteristics. For this sake the following ioctl codes are introduced - TIOCGPKT to get packet mode state - TIOCGPTLCK to get Pty locked state - TIOCGEXCL to get Exclusive mode state Note this ioctls are a bit unsafe in terms of data obtained consistency. The tty characteristics might be changed right after ioctl complete. Keep it in mind and use this ioctl carefully. v2: - Use TIOC prefix for ioctl codes (by jslaby@) Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> CC: Alan Cox <alan@lxorguk.ukuu.org.uk> CC: "H. Peter Anvin" <hpa@zytor.com> CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org> CC: Pavel Emelyanov <xemul@parallels.com> CC: Jiri Slaby <jslaby@suse.cz> --- drivers/tty/pty.c | 32 ++++++++++++++++++++++++++++++++ drivers/tty/tty_io.c | 7 +++++++ fs/compat_ioctl.c | 3 +++ include/asm-generic/ioctls.h | 3 +++ 4 files changed, 45 insertions(+) Index: tty.git/drivers/tty/pty.c =================================================================== --- tty.git.orig/drivers/tty/pty.c +++ tty.git/drivers/tty/pty.c @@ -174,6 +174,14 @@ static int pty_set_lock(struct tty_struc return 0; } +static int pty_get_lock(struct tty_struct *tty, int __user *arg) +{ + int locked = test_bit(TTY_PTY_LOCK, &tty->flags); + if (put_user(locked, arg)) + return -EFAULT; + return 0; +} + /* Set the packet mode on a pty */ static int pty_set_pktmode(struct tty_struct *tty, int __user *arg) { @@ -196,6 +204,22 @@ static int pty_set_pktmode(struct tty_st return 0; } +/* Get the packet mode of a pty */ +static int pty_get_pktmode(struct tty_struct *tty, int __user *arg) +{ + unsigned long flags; + int pktmode; + + spin_lock_irqsave(&tty->ctrl_lock, flags); + pktmode = tty->packet; + spin_unlock_irqrestore(&tty->ctrl_lock, flags); + + if (put_user(pktmode, arg)) + return -EFAULT; + + return 0; +} + /* Send a signal to the slave */ static int pty_signal(struct tty_struct *tty, int sig) { @@ -415,8 +439,12 @@ static int pty_bsd_ioctl(struct tty_stru switch (cmd) { case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */ return pty_set_lock(tty, (int __user *) arg); + case TIOCGPTLCK: /* Get PT Lock status */ + return pty_get_lock(tty, (int __user *)arg); case TIOCPKT: /* Set PT packet mode */ return pty_set_pktmode(tty, (int __user *)arg); + case TIOCGPKT: /* Get PT packet mode */ + return pty_get_pktmode(tty, (int __user *)arg); case TIOCSIG: /* Send signal to other side of pty */ return pty_signal(tty, (int) arg); } @@ -531,8 +559,12 @@ static int pty_unix98_ioctl(struct tty_s switch (cmd) { case TIOCSPTLCK: /* Set PT Lock (disallow slave open) */ return pty_set_lock(tty, (int __user *)arg); + case TIOCGPTLCK: /* Get PT Lock status */ + return pty_get_lock(tty, (int __user *)arg); case TIOCPKT: /* Set PT packet mode */ return pty_set_pktmode(tty, (int __user *)arg); + case TIOCGPKT: /* Get PT packet mode */ + return pty_get_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: tty.git/drivers/tty/tty_io.c =================================================================== --- tty.git.orig/drivers/tty/tty_io.c +++ tty.git/drivers/tty/tty_io.c @@ -2693,6 +2693,13 @@ long tty_ioctl(struct file *file, unsign case TIOCNXCL: clear_bit(TTY_EXCLUSIVE, &tty->flags); return 0; + case TIOCGEXCL: + { + int excl = test_bit(TTY_EXCLUSIVE, &tty->flags); + if (put_user(excl, (int __user *)p)) + return -EFAULT; + return 0; + } case TIOCNOTTY: if (current->signal->tty != tty) return -ENOTTY; Index: tty.git/fs/compat_ioctl.c =================================================================== --- tty.git.orig/fs/compat_ioctl.c +++ tty.git/fs/compat_ioctl.c @@ -842,6 +842,9 @@ COMPATIBLE_IOCTL(TIOCGDEV) COMPATIBLE_IOCTL(TIOCCBRK) COMPATIBLE_IOCTL(TIOCGSID) COMPATIBLE_IOCTL(TIOCGICOUNT) +COMPATIBLE_IOCTL(TIOCGPKT) +COMPATIBLE_IOCTL(TIOCGPTLCK) +COMPATIBLE_IOCTL(TIOCGEXCL) /* Little t */ COMPATIBLE_IOCTL(TIOCGETD) COMPATIBLE_IOCTL(TIOCSETD) Index: tty.git/include/asm-generic/ioctls.h =================================================================== --- tty.git.orig/include/asm-generic/ioctls.h +++ tty.git/include/asm-generic/ioctls.h @@ -74,6 +74,9 @@ #define TCSETXW 0x5435 #define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */ #define TIOCVHANGUP 0x5437 +#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ +#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ +#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ #define FIONCLEX 0x5450 #define FIOCLEX 0x5451 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 2/2] tty: Add get- ioctls to fetch tty status v2 2012-09-27 17:00 ` [patch 2/2] tty: Add get- ioctls to fetch tty status v2 Cyrill Gorcunov 2012-09-27 17:42 ` Cyrill Gorcunov @ 2012-09-27 17:49 ` Jiri Slaby 2012-09-27 17:58 ` Cyrill Gorcunov 1 sibling, 1 reply; 12+ messages in thread From: Jiri Slaby @ 2012-09-27 17:49 UTC (permalink / raw) To: Cyrill Gorcunov; +Cc: linux-kernel, alan, hpa, gregkh, xemul On 09/27/2012 07:00 PM, Cyrill Gorcunov wrote: > @@ -199,6 +207,25 @@ static int pty_set_pktmode(struct tty_st > return 0; > } > > +/* Get the packet mode of a pty */ > +static int pty_get_pktmode(struct tty_struct *tty, int __user *arg) > +{ > + unsigned long flags; > + int pktmode; > + > + if (tty->driver->subtype != PTY_TYPE_MASTER) > + return -ENOTTY; The same as for 1/2^UFixed in v3 ;). > + spin_lock_irqsave(&tty->ctrl_lock, flags); I believe the lock is not the right one. It protects ctrl_status in TIOCPKT, not the packet. And it very seems that packet is unprotected at all over the code => the lock does not improve anything and is redundant. > + pktmode = tty->packet; > + spin_unlock_irqrestore(&tty->ctrl_lock, flags); > + > + if (put_user(pktmode, arg)) > + return -EFAULT; > + > + return 0; This can be just return put_user(pktmode, arg); Right? > +} > + ... > --- tty.git.orig/include/asm-generic/ioctls.h > +++ tty.git/include/asm-generic/ioctls.h > @@ -74,6 +74,9 @@ > #define TCSETXW 0x5435 > #define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */ > #define TIOCVHANGUP 0x5437 > +#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ > +#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ > +#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ This is not enough. Some arches do not include this file in their ioctls.h. You need to update them all. thanks, -- js suse labs ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 2/2] tty: Add get- ioctls to fetch tty status v2 2012-09-27 17:49 ` Jiri Slaby @ 2012-09-27 17:58 ` Cyrill Gorcunov 2012-09-27 18:01 ` Jiri Slaby 0 siblings, 1 reply; 12+ messages in thread From: Cyrill Gorcunov @ 2012-09-27 17:58 UTC (permalink / raw) To: Jiri Slaby; +Cc: linux-kernel, alan, hpa, gregkh, xemul On Thu, Sep 27, 2012 at 07:49:53PM +0200, Jiri Slaby wrote: > On 09/27/2012 07:00 PM, Cyrill Gorcunov wrote: > > @@ -199,6 +207,25 @@ static int pty_set_pktmode(struct tty_st > > return 0; > > } > > > > +/* Get the packet mode of a pty */ > > +static int pty_get_pktmode(struct tty_struct *tty, int __user *arg) > > +{ > > + unsigned long flags; > > + int pktmode; > > + > > + if (tty->driver->subtype != PTY_TYPE_MASTER) > > + return -ENOTTY; > > The same as for 1/2^UFixed in v3 ;). Already sent update, thanks :-) > > > + spin_lock_irqsave(&tty->ctrl_lock, flags); > > I believe the lock is not the right one. It protects ctrl_status in > TIOCPKT, not the packet. And it very seems that packet is unprotected at > all over the code => the lock does not improve anything and is redundant. Indeed, thanks Jiri! > > > + pktmode = tty->packet; > > + spin_unlock_irqrestore(&tty->ctrl_lock, flags); > > + > > + if (put_user(pktmode, arg)) > > + return -EFAULT; > > + > > + return 0; > > This can be just > return put_user(pktmode, arg); > Right? As far as I see, yeah, put_user_[n] does return -efault as well. > > > +} > > + > ... > > --- tty.git.orig/include/asm-generic/ioctls.h > > +++ tty.git/include/asm-generic/ioctls.h > > @@ -74,6 +74,9 @@ > > #define TCSETXW 0x5435 > > #define TIOCSIG _IOW('T', 0x36, int) /* pty: generate signal */ > > #define TIOCVHANGUP 0x5437 > > +#define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ > > +#define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ > > +#define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ > > This is not enough. Some arches do not include this file in their > ioctls.h. You need to update them all. Crap, for some reason cscope has not indexed them but git grep helped. I'll update. Thanks, Jiri! Cyrill ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch 2/2] tty: Add get- ioctls to fetch tty status v2 2012-09-27 17:58 ` Cyrill Gorcunov @ 2012-09-27 18:01 ` Jiri Slaby 0 siblings, 0 replies; 12+ messages in thread From: Jiri Slaby @ 2012-09-27 18:01 UTC (permalink / raw) To: Cyrill Gorcunov; +Cc: linux-kernel, alan, hpa, gregkh, xemul On 09/27/2012 07:58 PM, Cyrill Gorcunov wrote: > Crap, for some reason cscope has not indexed them make ALLSOURCE_ARCHS=all cscope is needed if you want other than current ARCH. -- js suse labs ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2012-09-27 18:19 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-09-27 16:59 [patch 0/2] Add get- ioctls to fetch some bits from tty/pty status Cyrill Gorcunov 2012-09-27 16:59 ` [patch 1/2] tty: pty - Move TIOCPKT handling into pty.c Cyrill Gorcunov 2012-09-27 17:33 ` Jiri Slaby 2012-09-27 17:37 ` Cyrill Gorcunov 2012-09-27 18:14 ` Greg KH 2012-09-27 18:18 ` Cyrill Gorcunov 2012-09-27 17:40 ` Cyrill Gorcunov 2012-09-27 17:00 ` [patch 2/2] tty: Add get- ioctls to fetch tty status v2 Cyrill Gorcunov 2012-09-27 17:42 ` Cyrill Gorcunov 2012-09-27 17:49 ` Jiri Slaby 2012-09-27 17:58 ` Cyrill Gorcunov 2012-09-27 18:01 ` Jiri Slaby
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox