mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-13 11:51:32 +00:00
TTY: move low_latency to tty_port
One point is to have less places where we actually need tty pointer. The other is that low_latency is bound to buffer processing and buffers are now in tty_port. So it makes sense to move low_latency to tty_port too. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
05c7cd3990
commit
d6c53c0e9b
@ -436,7 +436,7 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
|
||||
struct tty_port *port = &info->port;
|
||||
|
||||
tty->driver_data = info;
|
||||
tty->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
/*
|
||||
* figure out which console to use (should be one already)
|
||||
|
@ -537,7 +537,7 @@ static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port)
|
||||
count = CIRC_CNT(port->rx_inp, port->rx_outp, MNSC_BUFFER_SIZE);
|
||||
count = tty_buffer_request_room(port, count);
|
||||
if (count == 0) {
|
||||
if (!tty->low_latency)
|
||||
if (!port->low_latency)
|
||||
tty_flip_buffer_push(tty);
|
||||
return;
|
||||
}
|
||||
@ -546,7 +546,7 @@ try_again:
|
||||
/* pull chars out of the hat */
|
||||
ix = ACCESS_ONCE(port->rx_outp);
|
||||
if (CIRC_CNT(port->rx_inp, ix, MNSC_BUFFER_SIZE) == 0) {
|
||||
if (push && !tty->low_latency)
|
||||
if (push && !port->low_latency)
|
||||
tty_flip_buffer_push(tty);
|
||||
return;
|
||||
}
|
||||
@ -678,7 +678,7 @@ insert:
|
||||
|
||||
count--;
|
||||
if (count <= 0) {
|
||||
if (!tty->low_latency)
|
||||
if (!port->low_latency)
|
||||
tty_flip_buffer_push(tty);
|
||||
return;
|
||||
}
|
||||
|
@ -2522,7 +2522,7 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
tty->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
spin_lock_irqsave(&info->netlock, flags);
|
||||
if (info->netcount) {
|
||||
|
@ -164,7 +164,7 @@ static int if_open(struct tty_struct *tty, struct file *filp)
|
||||
|
||||
if (cs->port.count == 1) {
|
||||
tty_port_tty_set(&cs->port, tty);
|
||||
tty->low_latency = 1;
|
||||
cs->port.low_latency = 1;
|
||||
}
|
||||
|
||||
mutex_unlock(&cs->mutex);
|
||||
|
@ -91,7 +91,7 @@ static inline void update_tty_status(struct ser_device *ser)
|
||||
ser->tty->hw_stopped << 4 |
|
||||
ser->tty->flow_stopped << 3 |
|
||||
ser->tty->packet << 2 |
|
||||
ser->tty->low_latency << 1 |
|
||||
ser->tty->port->low_latency << 1 |
|
||||
ser->tty->warned;
|
||||
}
|
||||
static inline void debugfs_init(struct ser_device *ser, struct tty_struct *tty)
|
||||
|
@ -210,7 +210,7 @@ static int irtty_do_write(struct sir_dev *dev, const unsigned char *ptr, size_t
|
||||
* been received, which can now be decapsulated and delivered for
|
||||
* further processing
|
||||
*
|
||||
* calling context depends on underlying driver and tty->low_latency!
|
||||
* calling context depends on underlying driver and tty->port->low_latency!
|
||||
* for example (low_latency: 1 / 0):
|
||||
* serial.c: uart-interrupt / softint
|
||||
* usbserial: urb-complete-interrupt / softint
|
||||
|
@ -968,7 +968,7 @@ static int tty3215_open(struct tty_struct *tty, struct file * filp)
|
||||
|
||||
tty_port_tty_set(&raw->port, tty);
|
||||
|
||||
tty->low_latency = 0; /* don't use bottom half for pushing chars */
|
||||
raw->port.low_latency = 0; /* don't use bottom half for pushing chars */
|
||||
/*
|
||||
* Start up 3215 device
|
||||
*/
|
||||
|
@ -65,7 +65,7 @@ sclp_tty_open(struct tty_struct *tty, struct file *filp)
|
||||
{
|
||||
tty_port_tty_set(&sclp_port, tty);
|
||||
tty->driver_data = NULL;
|
||||
tty->low_latency = 0;
|
||||
sclp_port.low_latency = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -495,7 +495,7 @@ sclp_vt220_open(struct tty_struct *tty, struct file *filp)
|
||||
{
|
||||
if (tty->count == 1) {
|
||||
tty_port_tty_set(&sclp_vt220_port, tty);
|
||||
tty->low_latency = 0;
|
||||
sclp_vt220_port.low_latency = 0;
|
||||
if (!tty->winsize.ws_row && !tty->winsize.ws_col) {
|
||||
tty->winsize.ws_row = 24;
|
||||
tty->winsize.ws_col = 80;
|
||||
|
@ -860,7 +860,7 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty)
|
||||
tty->driver_data = tp;
|
||||
tty->winsize.ws_row = tp->view.rows - 2;
|
||||
tty->winsize.ws_col = tp->view.cols;
|
||||
tty->low_latency = 0;
|
||||
tp->port.low_latency = 0;
|
||||
/* why to reassign? */
|
||||
tty_port_tty_set(&tp->port, tty);
|
||||
tp->inattr = TF_INPUT;
|
||||
@ -893,7 +893,7 @@ static int tty3270_install(struct tty_driver *driver, struct tty_struct *tty)
|
||||
}
|
||||
|
||||
tty_port_tty_set(&tp->port, tty);
|
||||
tty->low_latency = 0;
|
||||
tp->port.low_latency = 0;
|
||||
tty->winsize.ws_row = tp->view.rows - 2;
|
||||
tty->winsize.ws_col = tp->view.cols;
|
||||
|
||||
|
@ -1099,7 +1099,7 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state,
|
||||
state->custom_divisor = new_serial.custom_divisor;
|
||||
port->close_delay = new_serial.close_delay * HZ/100;
|
||||
port->closing_wait = new_serial.closing_wait * HZ/100;
|
||||
tty->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
check_and_exit:
|
||||
if (port->flags & ASYNC_INITIALIZED) {
|
||||
@ -1528,7 +1528,7 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
|
||||
if (serial_paranoia_check(info, tty->name, "rs_open"))
|
||||
return -ENODEV;
|
||||
|
||||
tty->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
retval = startup(tty, info);
|
||||
if (retval) {
|
||||
|
@ -106,7 +106,7 @@ static int ipw_open(struct tty_struct *linux_tty, struct file *filp)
|
||||
|
||||
tty->port.tty = linux_tty;
|
||||
linux_tty->driver_data = tty;
|
||||
linux_tty->low_latency = 1;
|
||||
tty->port.low_latency = 1;
|
||||
|
||||
if (tty->tty_type == TTYTYPE_MODEM)
|
||||
ipwireless_ppp_open(tty->network);
|
||||
|
@ -1264,7 +1264,7 @@ static int mxser_set_serial_info(struct tty_struct *tty,
|
||||
(new_serial.flags & ASYNC_FLAGS));
|
||||
port->close_delay = new_serial.close_delay * HZ / 100;
|
||||
port->closing_wait = new_serial.closing_wait * HZ / 100;
|
||||
tty->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST &&
|
||||
(new_serial.baud_base != info->baud_base ||
|
||||
new_serial.custom_divisor !=
|
||||
|
@ -508,7 +508,7 @@ static void cpm_uart_set_termios(struct uart_port *port,
|
||||
|
||||
baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk / 16);
|
||||
if (baud < HW_BUF_SPD_THRESHOLD ||
|
||||
(pinfo->port.state && pinfo->port.state->port.tty->low_latency))
|
||||
(pinfo->port.state && pinfo->port.state->port.low_latency))
|
||||
pinfo->rx_fifosize = 1;
|
||||
else
|
||||
pinfo->rx_fifosize = RX_BUF_SIZE;
|
||||
|
@ -3462,7 +3462,7 @@ set_serial_info(struct e100_serial *info,
|
||||
info->type = new_serial.type;
|
||||
info->close_delay = new_serial.close_delay;
|
||||
info->closing_wait = new_serial.closing_wait;
|
||||
info->port.tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
info->port.low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
check_and_exit:
|
||||
if (info->flags & ASYNC_INITIALIZED) {
|
||||
@ -4106,7 +4106,7 @@ rs_open(struct tty_struct *tty, struct file * filp)
|
||||
tty->driver_data = info;
|
||||
info->port.tty = tty;
|
||||
|
||||
tty->low_latency = !!(info->flags & ASYNC_LOW_LATENCY);
|
||||
info->port.low_latency = !!(info->flags & ASYNC_LOW_LATENCY);
|
||||
|
||||
/*
|
||||
* If the port is in the middle of closing, bail out now
|
||||
|
@ -615,7 +615,7 @@ static int ifx_port_activate(struct tty_port *port, struct tty_struct *tty)
|
||||
tty->driver_data = ifx_dev;
|
||||
|
||||
/* allows flip string push from int context */
|
||||
tty->low_latency = 1;
|
||||
port->low_latency = 1;
|
||||
|
||||
/* set flag to allows data transfer */
|
||||
set_bit(IFX_SPI_STATE_IO_AVAILABLE, &ifx_dev->flags);
|
||||
|
@ -1000,7 +1000,7 @@ ioc3_change_speed(struct uart_port *the_port,
|
||||
|
||||
the_port->ignore_status_mask = N_ALL_INPUT;
|
||||
|
||||
state->port.tty->low_latency = 1;
|
||||
state->port.low_latency = 1;
|
||||
|
||||
if (iflag & IGNPAR)
|
||||
the_port->ignore_status_mask &= ~(N_PARITY_ERROR
|
||||
|
@ -1740,7 +1740,7 @@ ioc4_change_speed(struct uart_port *the_port,
|
||||
|
||||
the_port->ignore_status_mask = N_ALL_INPUT;
|
||||
|
||||
state->port.tty->low_latency = 1;
|
||||
state->port.low_latency = 1;
|
||||
|
||||
if (iflag & IGNPAR)
|
||||
the_port->ignore_status_mask &= ~(N_PARITY_ERROR
|
||||
|
@ -530,7 +530,7 @@ max3100_set_termios(struct uart_port *port, struct ktermios *termios,
|
||||
MAX3100_STATUS_OE;
|
||||
|
||||
/* we are sending char from a workqueue so enable */
|
||||
s->port.state->port.tty->low_latency = 1;
|
||||
s->port.state->port.low_latency = 1;
|
||||
|
||||
if (s->poll_time > 0)
|
||||
del_timer_sync(&s->timer);
|
||||
|
@ -970,7 +970,7 @@ static int mpsc_rx_intr(struct mpsc_port_info *pi)
|
||||
#endif
|
||||
/* Following use of tty struct directly is deprecated */
|
||||
if (tty_buffer_request_room(port, bytes_in) < bytes_in) {
|
||||
if (tty->low_latency)
|
||||
if (port->low_latency)
|
||||
tty_flip_buffer_push(tty);
|
||||
/*
|
||||
* If this failed then we will throw away the bytes
|
||||
|
@ -495,7 +495,7 @@ static int serial_m3110_startup(struct uart_port *port)
|
||||
| WC_BAUD_DR2;
|
||||
|
||||
/* as we use thread to handle tx/rx, need set low latency */
|
||||
port->state->port.tty->low_latency = 1;
|
||||
port->state->port.low_latency = 1;
|
||||
|
||||
if (max->irq) {
|
||||
max->read_thread = NULL;
|
||||
|
@ -1400,7 +1400,7 @@ static int msm_hs_startup(struct uart_port *uport)
|
||||
|
||||
/* do not let tty layer execute RX in global workqueue, use a
|
||||
* dedicated workqueue managed by this driver */
|
||||
uport->state->port.tty->low_latency = 1;
|
||||
uport->state->port.low_latency = 1;
|
||||
|
||||
/* turn on uart clk */
|
||||
ret = msm_hs_init_clk_locked(uport);
|
||||
|
@ -867,9 +867,7 @@ static int uart_set_info(struct tty_struct *tty, struct tty_port *port,
|
||||
port->closing_wait = closing_wait;
|
||||
if (new_info->xmit_fifo_size)
|
||||
uport->fifosize = new_info->xmit_fifo_size;
|
||||
if (port->tty)
|
||||
port->tty->low_latency =
|
||||
(uport->flags & UPF_LOW_LATENCY) ? 1 : 0;
|
||||
port->low_latency = (uport->flags & UPF_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
check_and_exit:
|
||||
retval = 0;
|
||||
@ -1565,7 +1563,8 @@ static int uart_open(struct tty_struct *tty, struct file *filp)
|
||||
*/
|
||||
tty->driver_data = state;
|
||||
state->uart_port->state = state;
|
||||
tty->low_latency = (state->uart_port->flags & UPF_LOW_LATENCY) ? 1 : 0;
|
||||
state->port.low_latency =
|
||||
(state->uart_port->flags & UPF_LOW_LATENCY) ? 1 : 0;
|
||||
tty_port_tty_set(port, tty);
|
||||
|
||||
/*
|
||||
|
@ -3415,7 +3415,7 @@ static int mgsl_open(struct tty_struct *tty, struct file * filp)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
info->port.tty->low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
spin_lock_irqsave(&info->netlock, flags);
|
||||
if (info->netcount) {
|
||||
|
@ -682,7 +682,7 @@ static int open(struct tty_struct *tty, struct file *filp)
|
||||
}
|
||||
|
||||
mutex_lock(&info->port.mutex);
|
||||
info->port.tty->low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
spin_lock_irqsave(&info->netlock, flags);
|
||||
if (info->netcount) {
|
||||
|
@ -761,7 +761,7 @@ static int open(struct tty_struct *tty, struct file *filp)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
info->port.tty->low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
info->port.low_latency = (info->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
spin_lock_irqsave(&info->netlock, flags);
|
||||
if (info->netcount) {
|
||||
|
@ -364,7 +364,7 @@ void tty_schedule_flip(struct tty_struct *tty)
|
||||
{
|
||||
struct tty_bufhead *buf = &tty->port->buf;
|
||||
unsigned long flags;
|
||||
WARN_ON(tty->low_latency);
|
||||
WARN_ON(tty->port->low_latency);
|
||||
|
||||
spin_lock_irqsave(&buf->lock, flags);
|
||||
if (buf->tail != NULL)
|
||||
@ -538,7 +538,7 @@ static void flush_to_ldisc(struct work_struct *work)
|
||||
*/
|
||||
void tty_flush_to_ldisc(struct tty_struct *tty)
|
||||
{
|
||||
if (!tty->low_latency)
|
||||
if (!tty->port->low_latency)
|
||||
flush_work(&tty->port->buf.work);
|
||||
}
|
||||
|
||||
@ -547,7 +547,8 @@ void tty_flush_to_ldisc(struct tty_struct *tty)
|
||||
* @tty: tty to push
|
||||
*
|
||||
* Queue a push of the terminal flip buffers to the line discipline. This
|
||||
* function must not be called from IRQ context if tty->low_latency is set.
|
||||
* function must not be called from IRQ context if port->low_latency is
|
||||
* set.
|
||||
*
|
||||
* In the event of the queue being busy for flipping the work will be
|
||||
* held off and retried later.
|
||||
@ -565,7 +566,7 @@ void tty_flip_buffer_push(struct tty_struct *tty)
|
||||
buf->tail->commit = buf->tail->used;
|
||||
spin_unlock_irqrestore(&buf->lock, flags);
|
||||
|
||||
if (tty->low_latency)
|
||||
if (tty->port->low_latency)
|
||||
flush_to_ldisc(&buf->work);
|
||||
else
|
||||
schedule_work(&buf->work);
|
||||
|
@ -202,7 +202,8 @@ struct tty_port {
|
||||
unsigned long iflags; /* TTYP_ internal flags */
|
||||
#define TTYP_FLUSHING 1 /* Flushing to ldisc in progress */
|
||||
#define TTYP_FLUSHPENDING 2 /* Queued buffer flush pending */
|
||||
unsigned char console:1; /* port is a console */
|
||||
unsigned char console:1, /* port is a console */
|
||||
low_latency:1; /* direct buffer flush */
|
||||
struct mutex mutex; /* Locking */
|
||||
struct mutex buf_mutex; /* Buffer alloc lock */
|
||||
unsigned char *xmit_buf; /* Optional buffer */
|
||||
@ -254,7 +255,7 @@ struct tty_struct {
|
||||
int count;
|
||||
struct winsize winsize; /* termios mutex */
|
||||
unsigned char stopped:1, hw_stopped:1, flow_stopped:1, packet:1;
|
||||
unsigned char low_latency:1, warned:1;
|
||||
unsigned char warned:1;
|
||||
unsigned char ctrl_status; /* ctrl_lock */
|
||||
unsigned int receive_room; /* Bytes free for queue */
|
||||
|
||||
|
@ -452,7 +452,7 @@ static int ircomm_tty_open(struct tty_struct *tty, struct file *filp)
|
||||
self->line, self->port.count);
|
||||
|
||||
/* Not really used by us, but lets do it anyway */
|
||||
tty->low_latency = (self->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
self->port.low_latency = (self->port.flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
/*
|
||||
* If the port is the middle of closing, bail out now
|
||||
|
Loading…
Reference in New Issue
Block a user