TTY/Serial fixes for 4.4-rc2
Here are a few small tty/serial driver fixes for 4.4-rc2 that resolve some reported problems. All have been in linux-next, full details are in the shortlog below. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlZSCjgACgkQMUfUDdst+yl4kQCgyYYsaVVUcG2i3HQUpio4CAJg EFQAn03Z0OD/EGNHKw7FtsICSgAhSatG =JRcn -----END PGP SIGNATURE----- Merge tag 'tty-4.4-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty Pull tty/serial fixes from Greg KH: "Here are a few small tty/serial driver fixes for 4.4-rc2 that resolve some reported problems. All have been in linux-next, full details are in the shortlog below" * tag 'tty-4.4-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: serial: export fsl8250_handle_irq serial: 8250_mid: Add missing dependency tty: audit: Fix audit source serial: etraxfs-uart: Fix crash serial: fsl_lpuart: Fix earlycon support bcm63xx_uart: Use the device name when registering an interrupt tty: Fix direct use of tty buffer work tty: Fix tty_send_xchar() lock order inversion
This commit is contained in:
Коммит
dcfeda9d5f
|
@ -169,7 +169,7 @@ static inline int tty_copy_to_user(struct tty_struct *tty,
|
|||
{
|
||||
struct n_tty_data *ldata = tty->disc_data;
|
||||
|
||||
tty_audit_add_data(tty, to, n, ldata->icanon);
|
||||
tty_audit_add_data(tty, from, n, ldata->icanon);
|
||||
return copy_to_user(to, from, n);
|
||||
}
|
||||
|
||||
|
|
|
@ -60,3 +60,4 @@ int fsl8250_handle_irq(struct uart_port *port)
|
|||
spin_unlock_irqrestore(&up->port.lock, flags);
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fsl8250_handle_irq);
|
||||
|
|
|
@ -373,6 +373,7 @@ config SERIAL_8250_MID
|
|||
depends on SERIAL_8250 && PCI
|
||||
select HSU_DMA if SERIAL_8250_DMA
|
||||
select HSU_DMA_PCI if X86_INTEL_MID
|
||||
select RATIONAL
|
||||
help
|
||||
Selecting this option will enable handling of the extra features
|
||||
present on the UART found on Intel Medfield SOC and various other
|
||||
|
|
|
@ -1539,7 +1539,6 @@ config SERIAL_FSL_LPUART
|
|||
tristate "Freescale lpuart serial port support"
|
||||
depends on HAS_DMA
|
||||
select SERIAL_CORE
|
||||
select SERIAL_EARLYCON
|
||||
help
|
||||
Support for the on-chip lpuart on some Freescale SOCs.
|
||||
|
||||
|
@ -1547,6 +1546,7 @@ config SERIAL_FSL_LPUART_CONSOLE
|
|||
bool "Console on Freescale lpuart serial port"
|
||||
depends on SERIAL_FSL_LPUART=y
|
||||
select SERIAL_CORE_CONSOLE
|
||||
select SERIAL_EARLYCON
|
||||
help
|
||||
If you have enabled the lpuart serial port on the Freescale SoCs,
|
||||
you can make it the console by answering Y to this option.
|
||||
|
|
|
@ -474,7 +474,7 @@ static int bcm_uart_startup(struct uart_port *port)
|
|||
|
||||
/* register irq and enable rx interrupts */
|
||||
ret = request_irq(port->irq, bcm_uart_interrupt, 0,
|
||||
bcm_uart_type(port), port);
|
||||
dev_name(port->dev), port);
|
||||
if (ret)
|
||||
return ret;
|
||||
bcm_uart_writel(port, UART_RX_INT_MASK, UART_IR_REG);
|
||||
|
|
|
@ -894,7 +894,7 @@ static int etraxfs_uart_probe(struct platform_device *pdev)
|
|||
up->regi_ser = of_iomap(np, 0);
|
||||
up->port.dev = &pdev->dev;
|
||||
|
||||
up->gpios = mctrl_gpio_init(&pdev->dev, 0);
|
||||
up->gpios = mctrl_gpio_init_noauto(&pdev->dev, 0);
|
||||
if (IS_ERR(up->gpios))
|
||||
return PTR_ERR(up->gpios);
|
||||
|
||||
|
|
|
@ -265,7 +265,7 @@ static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty,
|
|||
*
|
||||
* Audit @data of @size from @tty, if necessary.
|
||||
*/
|
||||
void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
|
||||
void tty_audit_add_data(struct tty_struct *tty, const void *data,
|
||||
size_t size, unsigned icanon)
|
||||
{
|
||||
struct tty_audit_buf *buf;
|
||||
|
|
|
@ -1282,18 +1282,22 @@ int tty_send_xchar(struct tty_struct *tty, char ch)
|
|||
int was_stopped = tty->stopped;
|
||||
|
||||
if (tty->ops->send_xchar) {
|
||||
down_read(&tty->termios_rwsem);
|
||||
tty->ops->send_xchar(tty, ch);
|
||||
up_read(&tty->termios_rwsem);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (tty_write_lock(tty, 0) < 0)
|
||||
return -ERESTARTSYS;
|
||||
|
||||
down_read(&tty->termios_rwsem);
|
||||
if (was_stopped)
|
||||
start_tty(tty);
|
||||
tty->ops->write(tty, &ch, 1);
|
||||
if (was_stopped)
|
||||
stop_tty(tty);
|
||||
up_read(&tty->termios_rwsem);
|
||||
tty_write_unlock(tty);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1147,16 +1147,12 @@ int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file,
|
|||
spin_unlock_irq(&tty->flow_lock);
|
||||
break;
|
||||
case TCIOFF:
|
||||
down_read(&tty->termios_rwsem);
|
||||
if (STOP_CHAR(tty) != __DISABLED_CHAR)
|
||||
retval = tty_send_xchar(tty, STOP_CHAR(tty));
|
||||
up_read(&tty->termios_rwsem);
|
||||
break;
|
||||
case TCION:
|
||||
down_read(&tty->termios_rwsem);
|
||||
if (START_CHAR(tty) != __DISABLED_CHAR)
|
||||
retval = tty_send_xchar(tty, START_CHAR(tty));
|
||||
up_read(&tty->termios_rwsem);
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
|
|
@ -592,7 +592,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc)
|
|||
|
||||
/* Restart the work queue in case no characters kick it off. Safe if
|
||||
already running */
|
||||
schedule_work(&tty->port->buf.work);
|
||||
tty_buffer_restart_work(tty->port);
|
||||
|
||||
tty_unlock(tty);
|
||||
return retval;
|
||||
|
|
|
@ -607,7 +607,7 @@ extern void n_tty_inherit_ops(struct tty_ldisc_ops *ops);
|
|||
|
||||
/* tty_audit.c */
|
||||
#ifdef CONFIG_AUDIT
|
||||
extern void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
|
||||
extern void tty_audit_add_data(struct tty_struct *tty, const void *data,
|
||||
size_t size, unsigned icanon);
|
||||
extern void tty_audit_exit(void);
|
||||
extern void tty_audit_fork(struct signal_struct *sig);
|
||||
|
@ -615,8 +615,8 @@ extern void tty_audit_tiocsti(struct tty_struct *tty, char ch);
|
|||
extern void tty_audit_push(struct tty_struct *tty);
|
||||
extern int tty_audit_push_current(void);
|
||||
#else
|
||||
static inline void tty_audit_add_data(struct tty_struct *tty,
|
||||
unsigned char *data, size_t size, unsigned icanon)
|
||||
static inline void tty_audit_add_data(struct tty_struct *tty, const void *data,
|
||||
size_t size, unsigned icanon)
|
||||
{
|
||||
}
|
||||
static inline void tty_audit_tiocsti(struct tty_struct *tty, char ch)
|
||||
|
|
Загрузка…
Ссылка в новой задаче