Commit 3caad34e authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'usb-serial-4.20-rc6' of...

Merge tag 'usb-serial-4.20-rc6' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-linus

Johan writes:

USB-serial fix for v4.20-rc6

Here's a fix for a reported USB-console regression in 4.18 which
revealed a long-standing bug in the console implementation.

The patch has been in linux-next over night with no reported issues.
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>

* tag 'usb-serial-4.20-rc6' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial:
  USB: serial: console: fix reported terminal settings
parents 0472bf06 f51ccf46
...@@ -1373,7 +1373,13 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx) ...@@ -1373,7 +1373,13 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx)
return ERR_PTR(retval); return ERR_PTR(retval);
} }
static void tty_free_termios(struct tty_struct *tty) /**
* tty_save_termios() - save tty termios data in driver table
* @tty: tty whose termios data to save
*
* Locking: Caller guarantees serialisation with tty_init_termios().
*/
void tty_save_termios(struct tty_struct *tty)
{ {
struct ktermios *tp; struct ktermios *tp;
int idx = tty->index; int idx = tty->index;
...@@ -1392,6 +1398,7 @@ static void tty_free_termios(struct tty_struct *tty) ...@@ -1392,6 +1398,7 @@ static void tty_free_termios(struct tty_struct *tty)
} }
*tp = tty->termios; *tp = tty->termios;
} }
EXPORT_SYMBOL_GPL(tty_save_termios);
/** /**
* tty_flush_works - flush all works of a tty/pty pair * tty_flush_works - flush all works of a tty/pty pair
...@@ -1491,7 +1498,7 @@ static void release_tty(struct tty_struct *tty, int idx) ...@@ -1491,7 +1498,7 @@ static void release_tty(struct tty_struct *tty, int idx)
WARN_ON(!mutex_is_locked(&tty_mutex)); WARN_ON(!mutex_is_locked(&tty_mutex));
if (tty->ops->shutdown) if (tty->ops->shutdown)
tty->ops->shutdown(tty); tty->ops->shutdown(tty);
tty_free_termios(tty); tty_save_termios(tty);
tty_driver_remove_tty(tty->driver, tty); tty_driver_remove_tty(tty->driver, tty);
tty->port->itty = NULL; tty->port->itty = NULL;
if (tty->link) if (tty->link)
......
...@@ -101,7 +101,6 @@ static int usb_console_setup(struct console *co, char *options) ...@@ -101,7 +101,6 @@ static int usb_console_setup(struct console *co, char *options)
cflag |= PARENB; cflag |= PARENB;
break; break;
} }
co->cflag = cflag;
/* /*
* no need to check the index here: if the index is wrong, console * no need to check the index here: if the index is wrong, console
...@@ -164,6 +163,7 @@ static int usb_console_setup(struct console *co, char *options) ...@@ -164,6 +163,7 @@ static int usb_console_setup(struct console *co, char *options)
serial->type->set_termios(tty, port, &dummy); serial->type->set_termios(tty, port, &dummy);
tty_port_tty_set(&port->port, NULL); tty_port_tty_set(&port->port, NULL);
tty_save_termios(tty);
tty_kref_put(tty); tty_kref_put(tty);
} }
tty_port_set_initialized(&port->port, 1); tty_port_set_initialized(&port->port, 1);
......
...@@ -556,6 +556,7 @@ extern struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx); ...@@ -556,6 +556,7 @@ extern struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx);
extern void tty_release_struct(struct tty_struct *tty, int idx); extern void tty_release_struct(struct tty_struct *tty, int idx);
extern int tty_release(struct inode *inode, struct file *filp); extern int tty_release(struct inode *inode, struct file *filp);
extern void tty_init_termios(struct tty_struct *tty); extern void tty_init_termios(struct tty_struct *tty);
extern void tty_save_termios(struct tty_struct *tty);
extern int tty_standard_install(struct tty_driver *driver, extern int tty_standard_install(struct tty_driver *driver,
struct tty_struct *tty); struct tty_struct *tty);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment