From 665569d0269be3dd67b768fb65061e1b54bb2faf Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Mon, 2 Apr 2012 13:54:45 +0200 Subject: [PATCH] TTY: 68328serial, use tty from tty_port And refcount that properly. Signed-off-by: Jiri Slaby Cc: Geert Uytterhoeven Cc: linux-m68k@lists.linux-m68k.org Acked-by: Greg Ungerer Signed-off-by: Greg Kroah-Hartman --- drivers/tty/serial/68328serial.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/tty/serial/68328serial.c b/drivers/tty/serial/68328serial.c index fde573b32ce0..77e10bb89e4b 100644 --- a/drivers/tty/serial/68328serial.c +++ b/drivers/tty/serial/68328serial.c @@ -114,7 +114,6 @@ struct m68k_serial { int port; int irq; int type; /* UART type */ - struct tty_struct *tty; int custom_divisor; int x_char; /* xon/xoff character */ int line; @@ -356,7 +355,7 @@ clear_and_return: irqreturn_t rs_interrupt(int irq, void *dev_id) { struct m68k_serial *info = dev_id; - struct tty_struct *tty = info->tty; + struct tty_struct *tty = tty_port_tty_get(&info->tport); m68328_uart *uart; unsigned short rx; unsigned short tx; @@ -374,6 +373,8 @@ irqreturn_t rs_interrupt(int irq, void *dev_id) #else receive_chars(info, tty, rx); #endif + tty_kref_put(tty); + return IRQ_HANDLED; } @@ -1062,7 +1063,7 @@ static void rs_close(struct tty_struct *tty, struct file * filp) tty_ldisc_flush(tty); tty->closing = 0; - info->tty = NULL; + tty_port_tty_set(&info->tport, NULL); #warning "This is not and has never been valid so fix it" #if 0 if (tty->ldisc.num != ldiscs[N_TTY].num) { @@ -1098,7 +1099,7 @@ void rs_hangup(struct tty_struct *tty) shutdown(info, tty); info->tport.count = 0; info->tport.flags &= ~ASYNC_NORMAL_ACTIVE; - info->tty = NULL; + tty_port_tty_set(&info->tport, NULL); wake_up_interruptible(&info->tport.open_wait); } @@ -1210,7 +1211,7 @@ int rs_open(struct tty_struct *tty, struct file * filp) info->tport.count++; tty->driver_data = info; - info->tty = tty; + tty_port_tty_set(&info->tport, tty); /* * Start up serial port @@ -1289,7 +1290,6 @@ rs68328_init(void) tty_port_init(&info->tport); info->magic = SERIAL_MAGIC; info->port = (int) &uart_addr[i]; - info->tty = NULL; info->irq = uart_irqs[i]; info->custom_divisor = 16; info->x_char = 0; -- 2.39.5