diff options
author | Alan Cox <alan@linux.intel.com> | 2009-11-30 08:17:14 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-12-11 18:18:07 -0500 |
commit | 568aafc627e2978509e8a80c640ba534d1e843cc (patch) | |
tree | 1a24c5c0fc3a56054fa054a0255c04e5b7848daa /drivers/char/tty_port.c | |
parent | 338818fd802a6baacb7e5b6910d52c8996ca6d28 (diff) |
tty: tty_port: Add a kref object to the tty port
Users of tty port need a way to refcount ports when hotplugging is
involved.
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/char/tty_port.c')
-rw-r--r-- | drivers/char/tty_port.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/char/tty_port.c b/drivers/char/tty_port.c index 84006de2900f..be492dd66437 100644 --- a/drivers/char/tty_port.c +++ b/drivers/char/tty_port.c | |||
@@ -29,6 +29,7 @@ void tty_port_init(struct tty_port *port) | |||
29 | spin_lock_init(&port->lock); | 29 | spin_lock_init(&port->lock); |
30 | port->close_delay = (50 * HZ) / 100; | 30 | port->close_delay = (50 * HZ) / 100; |
31 | port->closing_wait = (3000 * HZ) / 100; | 31 | port->closing_wait = (3000 * HZ) / 100; |
32 | kref_init(&port->kref); | ||
32 | } | 33 | } |
33 | EXPORT_SYMBOL(tty_port_init); | 34 | EXPORT_SYMBOL(tty_port_init); |
34 | 35 | ||
@@ -56,6 +57,23 @@ void tty_port_free_xmit_buf(struct tty_port *port) | |||
56 | } | 57 | } |
57 | EXPORT_SYMBOL(tty_port_free_xmit_buf); | 58 | EXPORT_SYMBOL(tty_port_free_xmit_buf); |
58 | 59 | ||
60 | static void tty_port_destructor(struct kref *kref) | ||
61 | { | ||
62 | struct tty_port *port = container_of(kref, struct tty_port, kref); | ||
63 | if (port->xmit_buf) | ||
64 | free_page((unsigned long)port->xmit_buf); | ||
65 | if (port->ops->destruct) | ||
66 | port->ops->destruct(port); | ||
67 | else | ||
68 | kfree(port); | ||
69 | } | ||
70 | |||
71 | void tty_port_put(struct tty_port *port) | ||
72 | { | ||
73 | if (port) | ||
74 | kref_put(&port->kref, tty_port_destructor); | ||
75 | } | ||
76 | EXPORT_SYMBOL(tty_port_put); | ||
59 | 77 | ||
60 | /** | 78 | /** |
61 | * tty_port_tty_get - get a tty reference | 79 | * tty_port_tty_get - get a tty reference |