TTY/Serial/fbcon fixes for 5.9-rc6
Here are some small TTY/Serial and one more fbcon fix for 5.9-rc6 They include: - serial core locking regression fixes - new device ids for 8250_pci driver - fbcon fix for syzbot found issue All have been in linux-next with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCX2dYjA8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ynbqQCgvYtuyYtnmQcLCwq/SM3gRF1NlMoAn3MXqtea 3cRoC8/q0tOp2SxgPnaY =YRtI -----END PGP SIGNATURE----- Merge tag 'tty-5.9-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty Pull tty/serial/fbcon fixes from Greg KH: "Here are some small tty/serial and one more fbcon fix. They include: - serial core locking regression fixes - new device ids for 8250_pci driver - fbcon fix for syzbot found issue All have been in linux-next with no reported issues" * tag 'tty-5.9-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: fbcon: Fix user font detection test at fbcon_resize(). serial: 8250_pci: Add Realtek 816a and 816b serial: core: fix console port-lock regression serial: core: fix port-lock initialisation
This commit is contained in:
Коммит
f44f3f83d8
|
@ -5566,6 +5566,17 @@ static const struct pci_device_id serial_pci_tbl[] = {
|
|||
PCI_ANY_ID, PCI_ANY_ID,
|
||||
0, 0, pbn_wch384_4 },
|
||||
|
||||
/*
|
||||
* Realtek RealManage
|
||||
*/
|
||||
{ PCI_VENDOR_ID_REALTEK, 0x816a,
|
||||
PCI_ANY_ID, PCI_ANY_ID,
|
||||
0, 0, pbn_b0_1_115200 },
|
||||
|
||||
{ PCI_VENDOR_ID_REALTEK, 0x816b,
|
||||
PCI_ANY_ID, PCI_ANY_ID,
|
||||
0, 0, pbn_b0_1_115200 },
|
||||
|
||||
/* Fintek PCI serial cards */
|
||||
{ PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 },
|
||||
{ PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 },
|
||||
|
|
|
@ -1916,24 +1916,12 @@ static inline bool uart_console_enabled(struct uart_port *port)
|
|||
return uart_console(port) && (port->cons->flags & CON_ENABLED);
|
||||
}
|
||||
|
||||
static void __uart_port_spin_lock_init(struct uart_port *port)
|
||||
static void uart_port_spin_lock_init(struct uart_port *port)
|
||||
{
|
||||
spin_lock_init(&port->lock);
|
||||
lockdep_set_class(&port->lock, &port_lock_key);
|
||||
}
|
||||
|
||||
/*
|
||||
* Ensure that the serial console lock is initialised early.
|
||||
* If this port is a console, then the spinlock is already initialised.
|
||||
*/
|
||||
static inline void uart_port_spin_lock_init(struct uart_port *port)
|
||||
{
|
||||
if (uart_console(port))
|
||||
return;
|
||||
|
||||
__uart_port_spin_lock_init(port);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_SERIAL_CORE_CONSOLE) || defined(CONFIG_CONSOLE_POLL)
|
||||
/**
|
||||
* uart_console_write - write a console message to a serial port
|
||||
|
@ -2086,7 +2074,15 @@ uart_set_options(struct uart_port *port, struct console *co,
|
|||
struct ktermios termios;
|
||||
static struct ktermios dummy;
|
||||
|
||||
uart_port_spin_lock_init(port);
|
||||
/*
|
||||
* Ensure that the serial-console lock is initialised early.
|
||||
*
|
||||
* Note that the console-enabled check is needed because of kgdboc,
|
||||
* which can end up calling uart_set_options() for an already enabled
|
||||
* console via tty_find_polling_driver() and uart_poll_init().
|
||||
*/
|
||||
if (!uart_console_enabled(port) && !port->console_reinit)
|
||||
uart_port_spin_lock_init(port);
|
||||
|
||||
memset(&termios, 0, sizeof(struct ktermios));
|
||||
|
||||
|
@ -2378,13 +2374,6 @@ uart_configure_port(struct uart_driver *drv, struct uart_state *state,
|
|||
/* Power up port for set_mctrl() */
|
||||
uart_change_pm(state, UART_PM_STATE_ON);
|
||||
|
||||
/*
|
||||
* If this driver supports console, and it hasn't been
|
||||
* successfully registered yet, initialise spin lock for it.
|
||||
*/
|
||||
if (port->cons && !(port->cons->flags & CON_ENABLED))
|
||||
__uart_port_spin_lock_init(port);
|
||||
|
||||
/*
|
||||
* Ensure that the modem control lines are de-activated.
|
||||
* keep the DTR setting that is set in uart_set_options()
|
||||
|
@ -2801,10 +2790,12 @@ static ssize_t console_store(struct device *dev,
|
|||
if (oldconsole && !newconsole) {
|
||||
ret = unregister_console(uport->cons);
|
||||
} else if (!oldconsole && newconsole) {
|
||||
if (uart_console(uport))
|
||||
if (uart_console(uport)) {
|
||||
uport->console_reinit = 1;
|
||||
register_console(uport->cons);
|
||||
else
|
||||
} else {
|
||||
ret = -ENOENT;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ret = -ENXIO;
|
||||
|
@ -2900,7 +2891,12 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
|
|||
goto out;
|
||||
}
|
||||
|
||||
uart_port_spin_lock_init(uport);
|
||||
/*
|
||||
* If this port is in use as a console then the spinlock is already
|
||||
* initialised.
|
||||
*/
|
||||
if (!uart_console_enabled(uport))
|
||||
uart_port_spin_lock_init(uport);
|
||||
|
||||
if (uport->cons && uport->dev)
|
||||
of_console_check(uport->dev->of_node, uport->cons->name, uport->line);
|
||||
|
|
|
@ -2018,7 +2018,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,
|
|||
struct fb_var_screeninfo var = info->var;
|
||||
int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh;
|
||||
|
||||
if (ops->p && ops->p->userfont && FNTSIZE(vc->vc_font.data)) {
|
||||
if (p->userfont && FNTSIZE(vc->vc_font.data)) {
|
||||
int size;
|
||||
int pitch = PITCH(vc->vc_font.width);
|
||||
|
||||
|
|
|
@ -248,6 +248,7 @@ struct uart_port {
|
|||
|
||||
unsigned char hub6; /* this should be in the 8250 driver */
|
||||
unsigned char suspended;
|
||||
unsigned char console_reinit;
|
||||
const char *name; /* port name */
|
||||
struct attribute_group *attr_group; /* port specific attributes */
|
||||
const struct attribute_group **tty_groups; /* all attributes (serial core use only) */
|
||||
|
|
Загрузка…
Ссылка в новой задаче