aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>2010-08-09 10:22:49 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2010-10-22 13:19:56 -0400
commit30004ac9c090dcdcca99556b4587b3bad828731a (patch)
treebf8931378abc6912d7e08f2d870d3ac058e78e83
parentf6f94e2ab1b33f0082ac22d71f66385a60d8157f (diff)
tty: add tty_struct->dev pointer to corresponding device instance
Some device drivers (mostly tty line disciplines) would like to have way know a struct device instance corresponding to passed tty_struct. Add a struct device pointer to struct tty_struct and populate it during initialize_tty_struct(). Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Acked-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/char/tty_io.c17
-rw-r--r--include/linux/tty.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index 613c852ee0fe..dc184d4b5638 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -183,6 +183,8 @@ struct tty_struct *alloc_tty_struct(void)
183 183
184void free_tty_struct(struct tty_struct *tty) 184void free_tty_struct(struct tty_struct *tty)
185{ 185{
186 if (tty->dev)
187 put_device(tty->dev);
186 kfree(tty->write_buf); 188 kfree(tty->write_buf);
187 tty_buffer_free_all(tty); 189 tty_buffer_free_all(tty);
188 kfree(tty); 190 kfree(tty);
@@ -2783,6 +2785,20 @@ void do_SAK(struct tty_struct *tty)
2783 2785
2784EXPORT_SYMBOL(do_SAK); 2786EXPORT_SYMBOL(do_SAK);
2785 2787
2788static int dev_match_devt(struct device *dev, void *data)
2789{
2790 dev_t *devt = data;
2791 return dev->devt == *devt;
2792}
2793
2794/* Must put_device() after it's unused! */
2795static struct device *tty_get_device(struct tty_struct *tty)
2796{
2797 dev_t devt = tty_devnum(tty);
2798 return class_find_device(tty_class, NULL, &devt, dev_match_devt);
2799}
2800
2801
2786/** 2802/**
2787 * initialize_tty_struct 2803 * initialize_tty_struct
2788 * @tty: tty to initialize 2804 * @tty: tty to initialize
@@ -2823,6 +2839,7 @@ void initialize_tty_struct(struct tty_struct *tty,
2823 tty->ops = driver->ops; 2839 tty->ops = driver->ops;
2824 tty->index = idx; 2840 tty->index = idx;
2825 tty_line_name(driver, idx, tty->name); 2841 tty_line_name(driver, idx, tty->name);
2842 tty->dev = tty_get_device(tty);
2826} 2843}
2827 2844
2828/** 2845/**
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 67d64e6efe7a..d94eb86266c4 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -256,6 +256,7 @@ struct tty_operations;
256struct tty_struct { 256struct tty_struct {
257 int magic; 257 int magic;
258 struct kref kref; 258 struct kref kref;
259 struct device *dev;
259 struct tty_driver *driver; 260 struct tty_driver *driver;
260 const struct tty_operations *ops; 261 const struct tty_operations *ops;
261 int index; 262 int index;