Re: [PATCH 08/50] greybus/uart: switch to ->[sg]et_serial()

2018-09-14 Thread Johan Hovold
On Thu, Sep 13, 2018 at 03:40:07AM +0100, Al Viro wrote:
> From: Al Viro 
> 
> Signed-off-by: Al Viro 

Reviewed-by: Johan Hovold 


[PATCH 08/50] greybus/uart: switch to ->[sg]et_serial()

2018-09-12 Thread Al Viro
From: Al Viro 

Signed-off-by: Al Viro 
---
 drivers/staging/greybus/uart.c | 47 --
 1 file changed, 18 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c
index 8a006323c3c1..3313cb0b60af 100644
--- a/drivers/staging/greybus/uart.c
+++ b/drivers/staging/greybus/uart.c
@@ -616,40 +616,33 @@ static void gb_tty_unthrottle(struct tty_struct *tty)
}
 }
 
-static int get_serial_info(struct gb_tty *gb_tty,
-  struct serial_struct __user *info)
+static int get_serial_info(struct tty_struct *tty,
+  struct serial_struct *ss)
 {
-   struct serial_struct tmp;
-
-   memset(&tmp, 0, sizeof(tmp));
-   tmp.type = PORT_16550A;
-   tmp.line = gb_tty->minor;
-   tmp.xmit_fifo_size = 16;
-   tmp.baud_base = 9600;
-   tmp.close_delay = gb_tty->port.close_delay / 10;
-   tmp.closing_wait =
+   struct gb_tty *gb_tty = tty->driver_data;
+
+   ss->type = PORT_16550A;
+   ss->line = gb_tty->minor;
+   ss->xmit_fifo_size = 16;
+   ss->baud_base = 9600;
+   ss->close_delay = gb_tty->port.close_delay / 10;
+   ss->closing_wait =
gb_tty->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
ASYNC_CLOSING_WAIT_NONE : gb_tty->port.closing_wait / 10;
-
-   if (copy_to_user(info, &tmp, sizeof(tmp)))
-   return -EFAULT;
return 0;
 }
 
-static int set_serial_info(struct gb_tty *gb_tty,
-  struct serial_struct __user *newinfo)
+static int set_serial_info(struct tty_struct *tty,
+  struct serial_struct *ss)
 {
-   struct serial_struct new_serial;
+   struct gb_tty *gb_tty = tty->driver_data;
unsigned int closing_wait;
unsigned int close_delay;
int retval = 0;
 
-   if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
-   return -EFAULT;
-
-   close_delay = new_serial.close_delay * 10;
-   closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
-   ASYNC_CLOSING_WAIT_NONE : new_serial.closing_wait * 10;
+   close_delay = ss->close_delay * 10;
+   closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
+   ASYNC_CLOSING_WAIT_NONE : ss->closing_wait * 10;
 
mutex_lock(&gb_tty->port.mutex);
if (!capable(CAP_SYS_ADMIN)) {
@@ -728,12 +721,6 @@ static int gb_tty_ioctl(struct tty_struct *tty, unsigned 
int cmd,
struct gb_tty *gb_tty = tty->driver_data;
 
switch (cmd) {
-   case TIOCGSERIAL:
-   return get_serial_info(gb_tty,
-  (struct serial_struct __user *)arg);
-   case TIOCSSERIAL:
-   return set_serial_info(gb_tty,
-  (struct serial_struct __user *)arg);
case TIOCMIWAIT:
return wait_serial_change(gb_tty, arg);
}
@@ -818,6 +805,8 @@ static const struct tty_operations gb_ops = {
.tiocmget = gb_tty_tiocmget,
.tiocmset = gb_tty_tiocmset,
.get_icount =   gb_tty_get_icount,
+   .set_serial =   set_serial_info,
+   .get_serial =   get_serial_info,
 };
 
 static const struct tty_port_operations gb_port_ops = {
-- 
2.11.0