summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlan Cox <alan@linux.intel.com>2011-08-26 12:26:00 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2011-08-26 20:01:15 +0200
commitda4e40e271a30ecf8b87f70619cca93c25ed0199 (patch)
tree56e8778f8f7e42121c512655b4d5b18b61e6b3f4 /drivers
parentmax3110: add sysrq support (diff)
downloadlinux-da4e40e271a30ecf8b87f70619cca93c25ed0199.tar.xz
linux-da4e40e271a30ecf8b87f70619cca93c25ed0199.zip
max3110: Fix up port->tty backreferencing
We want to keep refcounts properly on this against hangup. Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/tty/serial/mrst_max3110.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/tty/serial/mrst_max3110.c b/drivers/tty/serial/mrst_max3110.c
index 42aa43934b20..1aa2c3cd2146 100644
--- a/drivers/tty/serial/mrst_max3110.c
+++ b/drivers/tty/serial/mrst_max3110.c
@@ -347,7 +347,7 @@ receive_chars(struct uart_max3110 *max, unsigned short *str, int len)
if (!port->state)
return 0;
- tty = port->state->port.tty;
+ tty = tty_port_tty_get(&port->state->port);
if (!tty)
return 0;
@@ -364,8 +364,10 @@ receive_chars(struct uart_max3110 *max, unsigned short *str, int len)
}
}
- if (!w)
+ if (!w) {
+ tty_kref_put(tty);
return 0;
+ }
for (r = 0; w; r += usable, w -= usable) {
usable = tty_buffer_request_room(tty, w);
@@ -375,6 +377,7 @@ receive_chars(struct uart_max3110 *max, unsigned short *str, int len)
}
}
tty_flip_buffer_push(tty);
+ tty_kref_put(tty);
return r;
}