| From 765fd98acaf87df59fc8ff041ea7c9b574228d8e Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Wed, 8 Jul 2020 14:49:52 +0200 |
| Subject: [PATCH] USB: serial: ftdi_sio: clean up receive processing |
| |
| commit ce054039ba5e47b75a3be02a00274e52b06a6456 upstream. |
| |
| Clean up receive processing by dropping the character pointer and |
| keeping the length argument unchanged throughout the function. |
| |
| Also make it more apparent that sysrq processing can consume a |
| characters by adding an explicit continue. |
| |
| Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c |
| index 2587dcd3de68..13aaf0687367 100644 |
| --- a/drivers/usb/serial/ftdi_sio.c |
| +++ b/drivers/usb/serial/ftdi_sio.c |
| @@ -2440,7 +2440,6 @@ static int ftdi_process_packet(struct usb_serial_port *port, |
| struct ftdi_private *priv, unsigned char *buf, int len) |
| { |
| unsigned char status; |
| - unsigned char *ch; |
| int i; |
| char flag; |
| |
| @@ -2483,8 +2482,7 @@ static int ftdi_process_packet(struct usb_serial_port *port, |
| else |
| priv->transmit_empty = 0; |
| |
| - len -= 2; |
| - if (!len) |
| + if (len == 2) |
| return 0; /* status only */ |
| |
| /* |
| @@ -2513,19 +2511,20 @@ static int ftdi_process_packet(struct usb_serial_port *port, |
| } |
| } |
| |
| - port->icount.rx += len; |
| - ch = buf + 2; |
| + port->icount.rx += len - 2; |
| |
| if (port->port.console && port->sysrq) { |
| - for (i = 0; i < len; i++, ch++) { |
| - if (!usb_serial_handle_sysrq_char(port, *ch)) |
| - tty_insert_flip_char(&port->port, *ch, flag); |
| + for (i = 2; i < len; i++) { |
| + if (usb_serial_handle_sysrq_char(port, buf[i])) |
| + continue; |
| + tty_insert_flip_char(&port->port, buf[i], flag); |
| } |
| } else { |
| - tty_insert_flip_string_fixed_flag(&port->port, ch, flag, len); |
| + tty_insert_flip_string_fixed_flag(&port->port, buf + 2, flag, |
| + len - 2); |
| } |
| |
| - return len; |
| + return len - 2; |
| } |
| |
| static void ftdi_process_read_urb(struct urb *urb) |
| -- |
| 2.27.0 |
| |