diff options
author | Jiri Slaby <jslaby@suse.cz> | 2012-11-15 03:49:56 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-11-15 20:20:58 -0500 |
commit | 191c5f10275cfbb36802edadbdb10c73537327b4 (patch) | |
tree | 93e6f0d57cb1295fb7c461dbe5ecefafeb4ad15a /arch/alpha/kernel/srmcons.c | |
parent | d0f59141ca40159c9d142c0f62e9aea61f846539 (diff) |
TTY: call tty_port_destroy in the rest of drivers
After commit "TTY: move tty buffers to tty_port", the tty buffers are
not freed in some drivers. This is because tty_port_destructor is not
called whenever a tty_port is freed. This was an assumption I counted
with but was unfortunately untrue. So fix the drivers to fulfil this
assumption.
To be sure, the TTY buffers (and later some stuff) are gone along with
the tty_port, we have to call tty_port_destroy at tear-down places.
This is mostly where the structure containing a tty_port is freed.
This patch does exactly that -- put tty_port_destroy at those places.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/alpha/kernel/srmcons.c')
-rw-r--r-- | arch/alpha/kernel/srmcons.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c index 5d5865204a1d..59b7bbad8394 100644 --- a/arch/alpha/kernel/srmcons.c +++ b/arch/alpha/kernel/srmcons.c | |||
@@ -205,7 +205,6 @@ static const struct tty_operations srmcons_ops = { | |||
205 | static int __init | 205 | static int __init |
206 | srmcons_init(void) | 206 | srmcons_init(void) |
207 | { | 207 | { |
208 | tty_port_init(&srmcons_singleton.port); | ||
209 | setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, | 208 | setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, |
210 | (unsigned long)&srmcons_singleton); | 209 | (unsigned long)&srmcons_singleton); |
211 | if (srm_is_registered_console) { | 210 | if (srm_is_registered_console) { |
@@ -215,6 +214,9 @@ srmcons_init(void) | |||
215 | driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES); | 214 | driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES); |
216 | if (!driver) | 215 | if (!driver) |
217 | return -ENOMEM; | 216 | return -ENOMEM; |
217 | |||
218 | tty_port_init(&srmcons_singleton.port); | ||
219 | |||
218 | driver->driver_name = "srm"; | 220 | driver->driver_name = "srm"; |
219 | driver->name = "srm"; | 221 | driver->name = "srm"; |
220 | driver->major = 0; /* dynamic */ | 222 | driver->major = 0; /* dynamic */ |
@@ -227,6 +229,7 @@ srmcons_init(void) | |||
227 | err = tty_register_driver(driver); | 229 | err = tty_register_driver(driver); |
228 | if (err) { | 230 | if (err) { |
229 | put_tty_driver(driver); | 231 | put_tty_driver(driver); |
232 | tty_port_destroy(&srmcons_singleton.port); | ||
230 | return err; | 233 | return err; |
231 | } | 234 | } |
232 | srmcons_driver = driver; | 235 | srmcons_driver = driver; |