aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2012-11-15 03:49:56 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-11-15 20:20:58 -0500
commit191c5f10275cfbb36802edadbdb10c73537327b4 (patch)
tree93e6f0d57cb1295fb7c461dbe5ecefafeb4ad15a /drivers/char
parentd0f59141ca40159c9d142c0f62e9aea61f846539 (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/char')
-rw-r--r--drivers/char/pcmcia/synclink_cs.c5
-rw-r--r--drivers/char/ttyprintk.c4
2 files changed, 7 insertions, 2 deletions
diff --git a/drivers/char/pcmcia/synclink_cs.c b/drivers/char/pcmcia/synclink_cs.c
index 21721d25e388..b66eaa04f8cb 100644
--- a/drivers/char/pcmcia/synclink_cs.c
+++ b/drivers/char/pcmcia/synclink_cs.c
@@ -549,8 +549,10 @@ static int mgslpc_probe(struct pcmcia_device *link)
549 /* Initialize the struct pcmcia_device structure */ 549 /* Initialize the struct pcmcia_device structure */
550 550
551 ret = mgslpc_config(link); 551 ret = mgslpc_config(link);
552 if (ret) 552 if (ret) {
553 tty_port_destroy(&info->port);
553 return ret; 554 return ret;
555 }
554 556
555 mgslpc_add_device(info); 557 mgslpc_add_device(info);
556 558
@@ -2757,6 +2759,7 @@ static void mgslpc_remove_device(MGSLPC_INFO *remove_info)
2757 hdlcdev_exit(info); 2759 hdlcdev_exit(info);
2758#endif 2760#endif
2759 release_resources(info); 2761 release_resources(info);
2762 tty_port_destroy(&info->port);
2760 kfree(info); 2763 kfree(info);
2761 mgslpc_device_count--; 2764 mgslpc_device_count--;
2762 return; 2765 return;
diff --git a/drivers/char/ttyprintk.c b/drivers/char/ttyprintk.c
index af98f6d6509b..4945bd3d18d0 100644
--- a/drivers/char/ttyprintk.c
+++ b/drivers/char/ttyprintk.c
@@ -179,7 +179,6 @@ static int __init ttyprintk_init(void)
179{ 179{
180 int ret = -ENOMEM; 180 int ret = -ENOMEM;
181 181
182 tty_port_init(&tpk_port.port);
183 tpk_port.port.ops = &null_ops; 182 tpk_port.port.ops = &null_ops;
184 mutex_init(&tpk_port.port_write_mutex); 183 mutex_init(&tpk_port.port_write_mutex);
185 184
@@ -190,6 +189,8 @@ static int __init ttyprintk_init(void)
190 if (IS_ERR(ttyprintk_driver)) 189 if (IS_ERR(ttyprintk_driver))
191 return PTR_ERR(ttyprintk_driver); 190 return PTR_ERR(ttyprintk_driver);
192 191
192 tty_port_init(&tpk_port.port);
193
193 ttyprintk_driver->driver_name = "ttyprintk"; 194 ttyprintk_driver->driver_name = "ttyprintk";
194 ttyprintk_driver->name = "ttyprintk"; 195 ttyprintk_driver->name = "ttyprintk";
195 ttyprintk_driver->major = TTYAUX_MAJOR; 196 ttyprintk_driver->major = TTYAUX_MAJOR;
@@ -211,6 +212,7 @@ static int __init ttyprintk_init(void)
211error: 212error:
212 tty_unregister_driver(ttyprintk_driver); 213 tty_unregister_driver(ttyprintk_driver);
213 put_tty_driver(ttyprintk_driver); 214 put_tty_driver(ttyprintk_driver);
215 tty_port_destroy(&tpk_port.port);
214 ttyprintk_driver = NULL; 216 ttyprintk_driver = NULL;
215 return ret; 217 return ret;
216} 218}