mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 17:12:06 +00:00
TTY/Serial fixes for 5.16-rc6
Here are 2 small tty/serial fixes for 5.16-rc6. They include: - n_hdlc fix for syzbot reported problem that you were previously copied on. - 8250_fintek driver fix that resolved a console problem by removing a previous change. Both have been in linux-next with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCYb4RaQ8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+yn7zQCaAz1ifZnEEhKxP5yan7znu3g+bncAn2hac2Bt ZR15/yulRfrw9Sn0TbDR =MloZ -----END PGP SIGNATURE----- Merge tag 'tty-5.16-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty Pull tty/serial fixes from Greg KH: "Here are two small tty/serial fixes for 5.16-rc6. They include: - n_hdlc fix for syzbot reported problem that you were previously copied on. - 8250_fintek driver fix that resolved a console problem by removing a previous change. Both have been in linux-next with no reported issues" * tag 'tty-5.16-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: serial: 8250_fintek: Fix garbled text for console tty: n_hdlc: make n_hdlc_tty_wakeup() asynchronous
This commit is contained in:
commit
3f667b5d40
@ -140,6 +140,8 @@ struct n_hdlc {
|
||||
struct n_hdlc_buf_list rx_buf_list;
|
||||
struct n_hdlc_buf_list tx_free_buf_list;
|
||||
struct n_hdlc_buf_list rx_free_buf_list;
|
||||
struct work_struct write_work;
|
||||
struct tty_struct *tty_for_write_work;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -154,6 +156,7 @@ static struct n_hdlc_buf *n_hdlc_buf_get(struct n_hdlc_buf_list *list);
|
||||
/* Local functions */
|
||||
|
||||
static struct n_hdlc *n_hdlc_alloc(void);
|
||||
static void n_hdlc_tty_write_work(struct work_struct *work);
|
||||
|
||||
/* max frame size for memory allocations */
|
||||
static int maxframe = 4096;
|
||||
@ -210,6 +213,8 @@ static void n_hdlc_tty_close(struct tty_struct *tty)
|
||||
wake_up_interruptible(&tty->read_wait);
|
||||
wake_up_interruptible(&tty->write_wait);
|
||||
|
||||
cancel_work_sync(&n_hdlc->write_work);
|
||||
|
||||
n_hdlc_free_buf_list(&n_hdlc->rx_free_buf_list);
|
||||
n_hdlc_free_buf_list(&n_hdlc->tx_free_buf_list);
|
||||
n_hdlc_free_buf_list(&n_hdlc->rx_buf_list);
|
||||
@ -241,6 +246,8 @@ static int n_hdlc_tty_open(struct tty_struct *tty)
|
||||
return -ENFILE;
|
||||
}
|
||||
|
||||
INIT_WORK(&n_hdlc->write_work, n_hdlc_tty_write_work);
|
||||
n_hdlc->tty_for_write_work = tty;
|
||||
tty->disc_data = n_hdlc;
|
||||
tty->receive_room = 65536;
|
||||
|
||||
@ -334,6 +341,20 @@ check_again:
|
||||
goto check_again;
|
||||
} /* end of n_hdlc_send_frames() */
|
||||
|
||||
/**
|
||||
* n_hdlc_tty_write_work - Asynchronous callback for transmit wakeup
|
||||
* @work: pointer to work_struct
|
||||
*
|
||||
* Called when low level device driver can accept more send data.
|
||||
*/
|
||||
static void n_hdlc_tty_write_work(struct work_struct *work)
|
||||
{
|
||||
struct n_hdlc *n_hdlc = container_of(work, struct n_hdlc, write_work);
|
||||
struct tty_struct *tty = n_hdlc->tty_for_write_work;
|
||||
|
||||
n_hdlc_send_frames(n_hdlc, tty);
|
||||
} /* end of n_hdlc_tty_write_work() */
|
||||
|
||||
/**
|
||||
* n_hdlc_tty_wakeup - Callback for transmit wakeup
|
||||
* @tty: pointer to associated tty instance data
|
||||
@ -344,7 +365,7 @@ static void n_hdlc_tty_wakeup(struct tty_struct *tty)
|
||||
{
|
||||
struct n_hdlc *n_hdlc = tty->disc_data;
|
||||
|
||||
n_hdlc_send_frames(n_hdlc, tty);
|
||||
schedule_work(&n_hdlc->write_work);
|
||||
} /* end of n_hdlc_tty_wakeup() */
|
||||
|
||||
/**
|
||||
|
@ -290,25 +290,6 @@ static void fintek_8250_set_max_fifo(struct fintek_8250 *pdata)
|
||||
}
|
||||
}
|
||||
|
||||
static void fintek_8250_goto_highspeed(struct uart_8250_port *uart,
|
||||
struct fintek_8250 *pdata)
|
||||
{
|
||||
sio_write_reg(pdata, LDN, pdata->index);
|
||||
|
||||
switch (pdata->pid) {
|
||||
case CHIP_ID_F81966:
|
||||
case CHIP_ID_F81866: /* set uart clock for high speed serial mode */
|
||||
sio_write_mask_reg(pdata, F81866_UART_CLK,
|
||||
F81866_UART_CLK_MASK,
|
||||
F81866_UART_CLK_14_769MHZ);
|
||||
|
||||
uart->port.uartclk = 921600 * 16;
|
||||
break;
|
||||
default: /* leave clock speed untouched */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void fintek_8250_set_termios(struct uart_port *port,
|
||||
struct ktermios *termios,
|
||||
struct ktermios *old)
|
||||
@ -430,7 +411,6 @@ static int probe_setup_port(struct fintek_8250 *pdata,
|
||||
|
||||
fintek_8250_set_irq_mode(pdata, level_mode);
|
||||
fintek_8250_set_max_fifo(pdata);
|
||||
fintek_8250_goto_highspeed(uart, pdata);
|
||||
|
||||
fintek_8250_exit_key(addr[i]);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user