diff options
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/ia64/hp/sim/simserial.c | 18 | ||||
| -rw-r--r-- | arch/mn10300/kernel/mn10300-serial.c | 7 | ||||
| -rw-r--r-- | arch/parisc/kernel/pdc_cons.c | 8 | ||||
| -rw-r--r-- | arch/um/drivers/chan.h | 3 | ||||
| -rw-r--r-- | arch/um/drivers/chan_kern.c | 14 | ||||
| -rw-r--r-- | arch/um/drivers/line.c | 7 | ||||
| -rw-r--r-- | arch/xtensa/platforms/iss/console.c | 9 | 
7 files changed, 23 insertions, 43 deletions
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c index 942022a5bc8..da2f319fb71 100644 --- a/arch/ia64/hp/sim/simserial.c +++ b/arch/ia64/hp/sim/simserial.c @@ -53,9 +53,8 @@ struct tty_driver *hp_simserial_driver;  static struct console *console; -static void receive_chars(struct tty_struct *tty) +static void receive_chars(struct tty_port *port)  { -	struct tty_port *port = tty->port;  	unsigned char ch;  	static unsigned char seen_esc = 0; @@ -85,7 +84,7 @@ static void receive_chars(struct tty_struct *tty)  		if (tty_insert_flip_char(port, ch, TTY_NORMAL) == 0)  			break;  	} -	tty_flip_buffer_push(tty); +	tty_flip_buffer_push(port);  }  /* @@ -94,18 +93,9 @@ static void receive_chars(struct tty_struct *tty)  static irqreturn_t rs_interrupt_single(int irq, void *dev_id)  {  	struct serial_state *info = dev_id; -	struct tty_struct *tty = tty_port_tty_get(&info->port); -	if (!tty) { -		printk(KERN_INFO "%s: tty=0 problem\n", __func__); -		return IRQ_NONE; -	} -	/* -	 * pretty simple in our case, because we only get interrupts -	 * on inbound traffic -	 */ -	receive_chars(tty); -	tty_kref_put(tty); +	receive_chars(&info->port); +  	return IRQ_HANDLED;  } diff --git a/arch/mn10300/kernel/mn10300-serial.c b/arch/mn10300/kernel/mn10300-serial.c index ae61bd692b4..1dd20dbfd09 100644 --- a/arch/mn10300/kernel/mn10300-serial.c +++ b/arch/mn10300/kernel/mn10300-serial.c @@ -525,7 +525,6 @@ static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port)  {  	struct uart_icount *icount = &port->uart.icount;  	struct tty_port *port = &port->uart.state->port; -	struct tty_struct *tty = port->tty;  	unsigned ix;  	int count;  	u8 st, ch, push, status, overrun; @@ -538,7 +537,7 @@ static void mn10300_serial_receive_interrupt(struct mn10300_serial_port *port)  	count = tty_buffer_request_room(port, count);  	if (count == 0) {  		if (!port->low_latency) -			tty_flip_buffer_push(tty); +			tty_flip_buffer_push(port);  		return;  	} @@ -547,7 +546,7 @@ try_again:  	ix = ACCESS_ONCE(port->rx_outp);  	if (CIRC_CNT(port->rx_inp, ix, MNSC_BUFFER_SIZE) == 0) {  		if (push && !port->low_latency) -			tty_flip_buffer_push(tty); +			tty_flip_buffer_push(port);  		return;  	} @@ -679,7 +678,7 @@ insert:  	count--;  	if (count <= 0) {  		if (!port->low_latency) -			tty_flip_buffer_push(tty); +			tty_flip_buffer_push(port);  		return;  	} diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c index 4d92a379eb2..d5cae55195e 100644 --- a/arch/parisc/kernel/pdc_cons.c +++ b/arch/parisc/kernel/pdc_cons.c @@ -138,10 +138,6 @@ static const struct tty_operations pdc_console_tty_ops = {  static void pdc_console_poll(unsigned long unused)  {  	int data, count = 0; -	struct tty_struct *tty = tty_port_tty_get(&tty_port); - -	if (!tty) -		return;  	while (1) {  		data = pdc_console_poll_key(NULL); @@ -152,9 +148,7 @@ static void pdc_console_poll(unsigned long unused)  	}  	if (count) -		tty_flip_buffer_push(tty); - -	tty_kref_put(tty); +		tty_flip_buffer_push(&tty_port);  	if (pdc_cons.flags & CON_ENABLED)  		mod_timer(&pdc_console_timer, jiffies + PDC_CONS_POLL_DELAY); diff --git a/arch/um/drivers/chan.h b/arch/um/drivers/chan.h index 02b5a76e98d..78f1b899996 100644 --- a/arch/um/drivers/chan.h +++ b/arch/um/drivers/chan.h @@ -27,8 +27,7 @@ struct chan {  	void *data;  }; -extern void chan_interrupt(struct line *line, -			   struct tty_struct *tty, int irq); +extern void chan_interrupt(struct line *line, int irq);  extern int parse_chan_pair(char *str, struct line *line, int device,  			   const struct chan_opts *opts, char **error_out);  extern int write_chan(struct chan *chan, const char *buf, int len, diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c index 795bd810220..15c553c239a 100644 --- a/arch/um/drivers/chan_kern.c +++ b/arch/um/drivers/chan_kern.c @@ -131,11 +131,9 @@ void chan_enable_winch(struct chan *chan, struct tty_struct *tty)  static void line_timer_cb(struct work_struct *work)  {  	struct line *line = container_of(work, struct line, task.work); -	struct tty_struct *tty = tty_port_tty_get(&line->port);  	if (!line->throttled) -		chan_interrupt(line, tty, line->driver->read_irq); -	tty_kref_put(tty); +		chan_interrupt(line, line->driver->read_irq);  }  int enable_chan(struct line *line) @@ -546,7 +544,7 @@ int parse_chan_pair(char *str, struct line *line, int device,  	return 0;  } -void chan_interrupt(struct line *line, struct tty_struct *tty, int irq) +void chan_interrupt(struct line *line, int irq)  {  	struct tty_port *port = &line->port;  	struct chan *chan = line->chan_in; @@ -570,8 +568,11 @@ void chan_interrupt(struct line *line, struct tty_struct *tty, int irq)  		reactivate_fd(chan->fd, irq);  	if (err == -EIO) {  		if (chan->primary) { -			if (tty != NULL) +			struct tty_struct *tty = tty_port_tty_get(&line->port); +			if (tty != NULL) {  				tty_hangup(tty); +				tty_kref_put(tty); +			}  			if (line->chan_out != chan)  				close_one_chan(line->chan_out, 1);  		} @@ -580,6 +581,5 @@ void chan_interrupt(struct line *line, struct tty_struct *tty, int irq)  			return;  	}   out: -	if (tty) -		tty_flip_buffer_push(tty); +	tty_flip_buffer_push(port);  } diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index 9ffc28bd4b7..f1b38571f94 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c @@ -19,11 +19,10 @@ static irqreturn_t line_interrupt(int irq, void *data)  {  	struct chan *chan = data;  	struct line *line = chan->line; -	struct tty_struct *tty = tty_port_tty_get(&line->port);  	if (line) -		chan_interrupt(line, tty, irq); -	tty_kref_put(tty); +		chan_interrupt(line, irq); +  	return IRQ_HANDLED;  } @@ -234,7 +233,7 @@ void line_unthrottle(struct tty_struct *tty)  	struct line *line = tty->driver_data;  	line->throttled = 0; -	chan_interrupt(line, tty, line->driver->read_irq); +	chan_interrupt(line, line->driver->read_irq);  	/*  	 * Maybe there is enough stuff pending that calling the interrupt diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c index 62447d63890..da9866f7fec 100644 --- a/arch/xtensa/platforms/iss/console.c +++ b/arch/xtensa/platforms/iss/console.c @@ -58,7 +58,8 @@ static int rs_open(struct tty_struct *tty, struct file * filp)  	tty->port = &serial_port;  	spin_lock(&timer_lock);  	if (tty->count == 1) { -		setup_timer(&serial_timer, rs_poll, (unsigned long)tty); +		setup_timer(&serial_timer, rs_poll, +				(unsigned long)&serial_port);  		mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE);  	}  	spin_unlock(&timer_lock); @@ -97,9 +98,7 @@ static int rs_write(struct tty_struct * tty,  static void rs_poll(unsigned long priv)  { -	struct tty_struct* tty = (struct tty_struct*) priv; -	struct tty_port *port = tty->port; - +	struct tty_port *port = (struct tty_port *)priv;  	struct timeval tv = { .tv_sec = 0, .tv_usec = 0 };  	int i = 0;  	unsigned char c; @@ -113,7 +112,7 @@ static void rs_poll(unsigned long priv)  	}  	if (i) -		tty_flip_buffer_push(tty); +		tty_flip_buffer_push(port);  	mod_timer(&serial_timer, jiffies + SERIAL_TIMER_VALUE);  |