1 | // SPDX-License-Identifier: GPL-2.0 |
---|---|
2 | #include <linux/tty.h> |
3 | #include <linux/module.h> |
4 | #include <linux/kallsyms.h> |
5 | #include <linux/semaphore.h> |
6 | #include <linux/sched.h> |
7 | #include "tty.h" |
8 | |
9 | /* Legacy tty mutex glue */ |
10 | |
11 | /* |
12 | * Getting the big tty mutex. |
13 | */ |
14 | |
15 | void tty_lock(struct tty_struct *tty) |
16 | { |
17 | tty_kref_get(tty); |
18 | mutex_lock(&tty->legacy_mutex); |
19 | } |
20 | EXPORT_SYMBOL(tty_lock); |
21 | |
22 | int tty_lock_interruptible(struct tty_struct *tty) |
23 | { |
24 | int ret; |
25 | |
26 | tty_kref_get(tty); |
27 | ret = mutex_lock_interruptible(&tty->legacy_mutex); |
28 | if (ret) |
29 | tty_kref_put(tty); |
30 | return ret; |
31 | } |
32 | |
33 | void tty_unlock(struct tty_struct *tty) |
34 | { |
35 | mutex_unlock(lock: &tty->legacy_mutex); |
36 | tty_kref_put(tty); |
37 | } |
38 | EXPORT_SYMBOL(tty_unlock); |
39 | |
40 | void tty_lock_slave(struct tty_struct *tty) |
41 | { |
42 | if (tty && tty != tty->link) |
43 | tty_lock(tty); |
44 | } |
45 | |
46 | void tty_unlock_slave(struct tty_struct *tty) |
47 | { |
48 | if (tty && tty != tty->link) |
49 | tty_unlock(tty); |
50 | } |
51 | |
52 | void tty_set_lock_subclass(struct tty_struct *tty) |
53 | { |
54 | lockdep_set_subclass(&tty->legacy_mutex, TTY_LOCK_SLAVE); |
55 | } |
56 |