Commit | Line | Data |
---|---|---|
b07471fa AB |
1 | #include <linux/tty.h> |
2 | #include <linux/module.h> | |
3 | #include <linux/kallsyms.h> | |
4 | #include <linux/semaphore.h> | |
5 | #include <linux/sched.h> | |
6 | ||
d29f3ef3 | 7 | /* Legacy tty mutex glue */ |
b07471fa AB |
8 | |
9 | /* | |
10 | * Getting the big tty mutex. | |
11 | */ | |
d29f3ef3 AC |
12 | |
13 | void __lockfunc tty_lock(struct tty_struct *tty) | |
b07471fa | 14 | { |
d29f3ef3 AC |
15 | if (tty->magic != TTY_MAGIC) { |
16 | printk(KERN_ERR "L Bad %p\n", tty); | |
17 | WARN_ON(1); | |
18 | return; | |
19 | } | |
20 | tty_kref_get(tty); | |
21 | mutex_lock(&tty->legacy_mutex); | |
b07471fa AB |
22 | } |
23 | EXPORT_SYMBOL(tty_lock); | |
24 | ||
d29f3ef3 | 25 | void __lockfunc tty_unlock(struct tty_struct *tty) |
b07471fa | 26 | { |
d29f3ef3 AC |
27 | if (tty->magic != TTY_MAGIC) { |
28 | printk(KERN_ERR "U Bad %p\n", tty); | |
29 | WARN_ON(1); | |
30 | return; | |
31 | } | |
32 | mutex_unlock(&tty->legacy_mutex); | |
33 | tty_kref_put(tty); | |
b07471fa AB |
34 | } |
35 | EXPORT_SYMBOL(tty_unlock); | |
d29f3ef3 AC |
36 | |
37 | /* | |
38 | * Getting the big tty mutex for a pair of ttys with lock ordering | |
39 | * On a non pty/tty pair tty2 can be NULL which is just fine. | |
40 | */ | |
41 | void __lockfunc tty_lock_pair(struct tty_struct *tty, | |
42 | struct tty_struct *tty2) | |
43 | { | |
44 | if (tty < tty2) { | |
45 | tty_lock(tty); | |
46 | tty_lock(tty2); | |
47 | } else { | |
48 | if (tty2 && tty2 != tty) | |
49 | tty_lock(tty2); | |
50 | tty_lock(tty); | |
51 | } | |
52 | } | |
53 | EXPORT_SYMBOL(tty_lock_pair); | |
54 | ||
55 | void __lockfunc tty_unlock_pair(struct tty_struct *tty, | |
56 | struct tty_struct *tty2) | |
57 | { | |
58 | tty_unlock(tty); | |
59 | if (tty2 && tty2 != tty) | |
60 | tty_unlock(tty2); | |
61 | } | |
62 | EXPORT_SYMBOL(tty_unlock_pair); |