Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -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)
	}
	}
	*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)
	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)
+1 −1
Original line number Original line Diff line number Diff line
@@ -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)
			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);
+1 −0
Original line number Original line Diff line number Diff line
@@ -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);