Message ID | 20231109085038.371977-2-fe@dev.tdt.de |
---|---|
State | Superseded |
Headers | show |
Series | ledtrig-tty: add additional tty state evaluation | expand |
On 09. 11. 23, 9:50, Florian Eckert wrote: > There is no in-kernel function to get the status register of a tty device > like the TIOCMGET ioctl returns to userspace. Create a new function, > tty_get_tiocm(), to obtain the status register that other portions of the > kernel can call if they need this information, and move the existing > internal tty_tiocmget() function to use this interface. > > Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Signed-off-by: Florian Eckert <fe@dev.tdt.de> > --- > drivers/tty/tty_io.c | 28 ++++++++++++++++++++++------ > include/linux/tty.h | 1 + > 2 files changed, 23 insertions(+), 6 deletions(-) > > diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c > index 06414e43e0b5..e2e93404133e 100644 > --- a/drivers/tty/tty_io.c > +++ b/drivers/tty/tty_io.c > @@ -2498,6 +2498,24 @@ static int send_break(struct tty_struct *tty, unsigned int duration) > return retval; > } > > +/** > + * tty_get_tiocm - get tiocm status register > + * @tty: tty device > + * > + * Obtain the modem status bits from the tty driver if the feature > + * is supported. > + */ > +int tty_get_tiocm(struct tty_struct *tty) > +{ > + int retval = -ENOTTY; > + > + if (tty->ops->tiocmget) > + retval = tty->ops->tiocmget(tty); > + > + return retval; Why not simply: { if (tty->ops->tiocmget) return tty->ops->tiocmget(tty); return -ENOTTY; } ? thanks,
On 2023-11-20 08:21, Jiri Slaby wrote: > On 09. 11. 23, 9:50, Florian Eckert wrote: >> There is no in-kernel function to get the status register of a tty >> device >> like the TIOCMGET ioctl returns to userspace. Create a new function, >> tty_get_tiocm(), to obtain the status register that other portions of >> the >> kernel can call if they need this information, and move the existing >> internal tty_tiocmget() function to use this interface. >> >> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> >> Signed-off-by: Florian Eckert <fe@dev.tdt.de> >> --- >> drivers/tty/tty_io.c | 28 ++++++++++++++++++++++------ >> include/linux/tty.h | 1 + >> 2 files changed, 23 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c >> index 06414e43e0b5..e2e93404133e 100644 >> --- a/drivers/tty/tty_io.c >> +++ b/drivers/tty/tty_io.c >> @@ -2498,6 +2498,24 @@ static int send_break(struct tty_struct *tty, >> unsigned int duration) >> return retval; >> } >> +/** >> + * tty_get_tiocm - get tiocm status register >> + * @tty: tty device >> + * >> + * Obtain the modem status bits from the tty driver if the feature >> + * is supported. >> + */ >> +int tty_get_tiocm(struct tty_struct *tty) >> +{ >> + int retval = -ENOTTY; >> + >> + if (tty->ops->tiocmget) >> + retval = tty->ops->tiocmget(tty); >> + >> + return retval; > > Why not simply: I just did it this way because it is also done this way in other functions in this file. > { > if (tty->ops->tiocmget) > return tty->ops->tiocmget(tty); > > return -ENOTTY; > } Of course, we could also do it this way. If this is the C style for the kernel, then I will change it. Please give me a short feedback whether I should change it and send a v9, or whether it is just a comment from you. Best regards Florian
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index 06414e43e0b5..e2e93404133e 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -2498,6 +2498,24 @@ static int send_break(struct tty_struct *tty, unsigned int duration) return retval; } +/** + * tty_get_tiocm - get tiocm status register + * @tty: tty device + * + * Obtain the modem status bits from the tty driver if the feature + * is supported. + */ +int tty_get_tiocm(struct tty_struct *tty) +{ + int retval = -ENOTTY; + + if (tty->ops->tiocmget) + retval = tty->ops->tiocmget(tty); + + return retval; +} +EXPORT_SYMBOL_GPL(tty_get_tiocm); + /** * tty_tiocmget - get modem status * @tty: tty device @@ -2510,14 +2528,12 @@ static int send_break(struct tty_struct *tty, unsigned int duration) */ static int tty_tiocmget(struct tty_struct *tty, int __user *p) { - int retval = -ENOTTY; + int retval; - if (tty->ops->tiocmget) { - retval = tty->ops->tiocmget(tty); + retval = tty_get_tiocm(tty); + if (retval >= 0) + retval = put_user(retval, p); - if (retval >= 0) - retval = put_user(retval, p); - } return retval; } diff --git a/include/linux/tty.h b/include/linux/tty.h index 4b6340ac2af2..d219a11e3fe0 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -419,6 +419,7 @@ bool tty_unthrottle_safe(struct tty_struct *tty); int tty_do_resize(struct tty_struct *tty, struct winsize *ws); int tty_get_icount(struct tty_struct *tty, struct serial_icounter_struct *icount); +int tty_get_tiocm(struct tty_struct *tty); int is_current_pgrp_orphaned(void); void tty_hangup(struct tty_struct *tty); void tty_vhangup(struct tty_struct *tty);