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/s390 | |
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/s390')
-rw-r--r-- | drivers/s390/char/con3215.c | 1 | ||||
-rw-r--r-- | drivers/s390/char/sclp_tty.c | 4 | ||||
-rw-r--r-- | drivers/s390/char/sclp_vt220.c | 2 | ||||
-rw-r--r-- | drivers/s390/char/tty3270.c | 2 |
4 files changed, 8 insertions, 1 deletions
diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c index 9ffb6d5f17aa..8fb014f32e4c 100644 --- a/drivers/s390/char/con3215.c +++ b/drivers/s390/char/con3215.c | |||
@@ -677,6 +677,7 @@ static void raw3215_free_info(struct raw3215_info *raw) | |||
677 | { | 677 | { |
678 | kfree(raw->inbuf); | 678 | kfree(raw->inbuf); |
679 | kfree(raw->buffer); | 679 | kfree(raw->buffer); |
680 | tty_port_destroy(&raw->port); | ||
680 | kfree(raw); | 681 | kfree(raw); |
681 | } | 682 | } |
682 | 683 | ||
diff --git a/drivers/s390/char/sclp_tty.c b/drivers/s390/char/sclp_tty.c index 30ec09e3d037..877fbc37c1e7 100644 --- a/drivers/s390/char/sclp_tty.c +++ b/drivers/s390/char/sclp_tty.c | |||
@@ -547,7 +547,6 @@ sclp_tty_init(void) | |||
547 | sclp_tty_tolower = 1; | 547 | sclp_tty_tolower = 1; |
548 | } | 548 | } |
549 | sclp_tty_chars_count = 0; | 549 | sclp_tty_chars_count = 0; |
550 | tty_port_init(&sclp_port); | ||
551 | 550 | ||
552 | rc = sclp_register(&sclp_input_event); | 551 | rc = sclp_register(&sclp_input_event); |
553 | if (rc) { | 552 | if (rc) { |
@@ -555,6 +554,8 @@ sclp_tty_init(void) | |||
555 | return rc; | 554 | return rc; |
556 | } | 555 | } |
557 | 556 | ||
557 | tty_port_init(&sclp_port); | ||
558 | |||
558 | driver->driver_name = "sclp_line"; | 559 | driver->driver_name = "sclp_line"; |
559 | driver->name = "sclp_line"; | 560 | driver->name = "sclp_line"; |
560 | driver->major = TTY_MAJOR; | 561 | driver->major = TTY_MAJOR; |
@@ -571,6 +572,7 @@ sclp_tty_init(void) | |||
571 | rc = tty_register_driver(driver); | 572 | rc = tty_register_driver(driver); |
572 | if (rc) { | 573 | if (rc) { |
573 | put_tty_driver(driver); | 574 | put_tty_driver(driver); |
575 | tty_port_destroy(&sclp_port); | ||
574 | return rc; | 576 | return rc; |
575 | } | 577 | } |
576 | sclp_tty_driver = driver; | 578 | sclp_tty_driver = driver; |
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c index 7e60f3d2f3f9..effcc8756e0a 100644 --- a/drivers/s390/char/sclp_vt220.c +++ b/drivers/s390/char/sclp_vt220.c | |||
@@ -615,6 +615,7 @@ static void __init __sclp_vt220_cleanup(void) | |||
615 | return; | 615 | return; |
616 | sclp_unregister(&sclp_vt220_register); | 616 | sclp_unregister(&sclp_vt220_register); |
617 | __sclp_vt220_free_pages(); | 617 | __sclp_vt220_free_pages(); |
618 | tty_port_destroy(&sclp_vt220_port); | ||
618 | } | 619 | } |
619 | 620 | ||
620 | /* Allocate buffer pages and register with sclp core. Controlled by init | 621 | /* Allocate buffer pages and register with sclp core. Controlled by init |
@@ -650,6 +651,7 @@ out: | |||
650 | if (rc) { | 651 | if (rc) { |
651 | __sclp_vt220_free_pages(); | 652 | __sclp_vt220_free_pages(); |
652 | sclp_vt220_init_count--; | 653 | sclp_vt220_init_count--; |
654 | tty_port_destroy(&sclp_vt220_port); | ||
653 | } | 655 | } |
654 | return rc; | 656 | return rc; |
655 | } | 657 | } |
diff --git a/drivers/s390/char/tty3270.c b/drivers/s390/char/tty3270.c index 482ee028f842..43ea0593bdb0 100644 --- a/drivers/s390/char/tty3270.c +++ b/drivers/s390/char/tty3270.c | |||
@@ -722,6 +722,7 @@ out_pages: | |||
722 | while (pages--) | 722 | while (pages--) |
723 | free_pages((unsigned long) tp->freemem_pages[pages], 0); | 723 | free_pages((unsigned long) tp->freemem_pages[pages], 0); |
724 | kfree(tp->freemem_pages); | 724 | kfree(tp->freemem_pages); |
725 | tty_port_destroy(&tp->port); | ||
725 | out_tp: | 726 | out_tp: |
726 | kfree(tp); | 727 | kfree(tp); |
727 | out_err: | 728 | out_err: |
@@ -744,6 +745,7 @@ tty3270_free_view(struct tty3270 *tp) | |||
744 | for (pages = 0; pages < TTY3270_STRING_PAGES; pages++) | 745 | for (pages = 0; pages < TTY3270_STRING_PAGES; pages++) |
745 | free_pages((unsigned long) tp->freemem_pages[pages], 0); | 746 | free_pages((unsigned long) tp->freemem_pages[pages], 0); |
746 | kfree(tp->freemem_pages); | 747 | kfree(tp->freemem_pages); |
748 | tty_port_destroy(&tp->port); | ||
747 | kfree(tp); | 749 | kfree(tp); |
748 | } | 750 | } |
749 | 751 | ||