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 /drivers/tty/vt | |
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 'drivers/tty/vt')
-rw-r--r-- | drivers/tty/vt/vt.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c index f87d7e8964bf..607636b4734d 100644 --- a/drivers/tty/vt/vt.c +++ b/drivers/tty/vt/vt.c | |||
@@ -779,6 +779,7 @@ int vc_allocate(unsigned int currcons) /* return 0 on success */ | |||
779 | con_set_default_unimap(vc); | 779 | con_set_default_unimap(vc); |
780 | vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL); | 780 | vc->vc_screenbuf = kmalloc(vc->vc_screenbuf_size, GFP_KERNEL); |
781 | if (!vc->vc_screenbuf) { | 781 | if (!vc->vc_screenbuf) { |
782 | tty_port_destroy(&vc->port); | ||
782 | kfree(vc); | 783 | kfree(vc); |
783 | vc_cons[currcons].d = NULL; | 784 | vc_cons[currcons].d = NULL; |
784 | return -ENOMEM; | 785 | return -ENOMEM; |
@@ -999,8 +1000,10 @@ void vc_deallocate(unsigned int currcons) | |||
999 | put_pid(vc->vt_pid); | 1000 | put_pid(vc->vt_pid); |
1000 | module_put(vc->vc_sw->owner); | 1001 | module_put(vc->vc_sw->owner); |
1001 | kfree(vc->vc_screenbuf); | 1002 | kfree(vc->vc_screenbuf); |
1002 | if (currcons >= MIN_NR_CONSOLES) | 1003 | if (currcons >= MIN_NR_CONSOLES) { |
1004 | tty_port_destroy(&vc->port); | ||
1003 | kfree(vc); | 1005 | kfree(vc); |
1006 | } | ||
1004 | vc_cons[currcons].d = NULL; | 1007 | vc_cons[currcons].d = NULL; |
1005 | } | 1008 | } |
1006 | } | 1009 | } |