aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/tty_ldisc.c
diff options
context:
space:
mode:
authorPeter Hurley <peter@hurleysoftware.com>2013-03-11 16:44:43 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-03-18 19:48:42 -0400
commit734de249fbe2fbf594c30202a343f0772b6d18fe (patch)
tree048ce23c19f836e49c5e47230f08d73109c06970 /drivers/tty/tty_ldisc.c
parentf48070457c728a1ff8f327240e70483cebabf83b (diff)
tty: Locate get/put ldisc functions together
Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/tty_ldisc.c')
-rw-r--r--drivers/tty/tty_ldisc.c46
1 files changed, 23 insertions, 23 deletions
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
index f26ef1ace4f1..4e46c1721b9d 100644
--- a/drivers/tty/tty_ldisc.c
+++ b/drivers/tty/tty_ldisc.c
@@ -179,6 +179,29 @@ static struct tty_ldisc *tty_ldisc_get(int disc)
179 return ld; 179 return ld;
180} 180}
181 181
182/**
183 * tty_ldisc_put - release the ldisc
184 *
185 * Complement of tty_ldisc_get().
186 */
187static inline void tty_ldisc_put(struct tty_ldisc *ld)
188{
189 unsigned long flags;
190
191 if (WARN_ON_ONCE(!ld))
192 return;
193
194 raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
195
196 /* unreleased reader reference(s) will cause this WARN */
197 WARN_ON(!atomic_dec_and_test(&ld->users));
198
199 ld->ops->refcount--;
200 module_put(ld->ops->owner);
201 kfree(ld);
202 raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
203}
204
182static void *tty_ldiscs_seq_start(struct seq_file *m, loff_t *pos) 205static void *tty_ldiscs_seq_start(struct seq_file *m, loff_t *pos)
183{ 206{
184 return (*pos < NR_LDISCS) ? pos : NULL; 207 return (*pos < NR_LDISCS) ? pos : NULL;
@@ -329,29 +352,6 @@ void tty_ldisc_deref(struct tty_ldisc *ld)
329EXPORT_SYMBOL_GPL(tty_ldisc_deref); 352EXPORT_SYMBOL_GPL(tty_ldisc_deref);
330 353
331/** 354/**
332 * tty_ldisc_put - release the ldisc
333 *
334 * Complement of tty_ldisc_get().
335 */
336static inline void tty_ldisc_put(struct tty_ldisc *ld)
337{
338 unsigned long flags;
339
340 if (WARN_ON_ONCE(!ld))
341 return;
342
343 raw_spin_lock_irqsave(&tty_ldisc_lock, flags);
344
345 /* unreleased reader reference(s) will cause this WARN */
346 WARN_ON(!atomic_dec_and_test(&ld->users));
347
348 ld->ops->refcount--;
349 module_put(ld->ops->owner);
350 kfree(ld);
351 raw_spin_unlock_irqrestore(&tty_ldisc_lock, flags);
352}
353
354/**
355 * tty_ldisc_enable - allow ldisc use 355 * tty_ldisc_enable - allow ldisc use
356 * @tty: terminal to activate ldisc on 356 * @tty: terminal to activate ldisc on
357 * 357 *