Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
tty
tty_mutex.c
Go to the documentation of this file.
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
7
/* Legacy tty mutex glue */
8
9
enum
{
10
TTY_MUTEX_NORMAL
,
11
TTY_MUTEX_NESTED
,
12
};
13
14
/*
15
* Getting the big tty mutex.
16
*/
17
18
static
void
__lockfunc
tty_lock_nested(
struct
tty_struct
*tty,
19
unsigned
int
subclass
)
20
{
21
if
(tty->
magic
!=
TTY_MAGIC
) {
22
printk
(
KERN_ERR
"L Bad %p\n"
, tty);
23
WARN_ON
(1);
24
return
;
25
}
26
tty_kref_get(tty);
27
mutex_lock_nested
(&tty->
legacy_mutex
, subclass);
28
}
29
30
void
__lockfunc
tty_lock
(
struct
tty_struct
*tty)
31
{
32
return
tty_lock_nested(tty,
TTY_MUTEX_NORMAL
);
33
}
34
EXPORT_SYMBOL
(
tty_lock
);
35
36
void
__lockfunc
tty_unlock
(
struct
tty_struct
*tty)
37
{
38
if
(tty->
magic
!=
TTY_MAGIC
) {
39
printk
(
KERN_ERR
"U Bad %p\n"
, tty);
40
WARN_ON
(1);
41
return
;
42
}
43
mutex_unlock
(&tty->
legacy_mutex
);
44
tty_kref_put
(tty);
45
}
46
EXPORT_SYMBOL
(
tty_unlock
);
47
48
/*
49
* Getting the big tty mutex for a pair of ttys with lock ordering
50
* On a non pty/tty pair tty2 can be NULL which is just fine.
51
*/
52
void
__lockfunc
tty_lock_pair
(
struct
tty_struct
*tty,
53
struct
tty_struct
*tty2)
54
{
55
if
(tty < tty2) {
56
tty_lock
(tty);
57
tty_lock_nested(tty2,
TTY_MUTEX_NESTED
);
58
}
else
{
59
if
(tty2 && tty2 != tty)
60
tty_lock
(tty2);
61
tty_lock_nested(tty,
TTY_MUTEX_NESTED
);
62
}
63
}
64
EXPORT_SYMBOL
(
tty_lock_pair
);
65
66
void
__lockfunc
tty_unlock_pair
(
struct
tty_struct
*tty,
67
struct
tty_struct
*tty2)
68
{
69
tty_unlock
(tty);
70
if
(tty2 && tty2 != tty)
71
tty_unlock
(tty2);
72
}
73
EXPORT_SYMBOL
(
tty_unlock_pair
);
Generated on Thu Jan 10 2013 14:35:16 for Linux Kernel by
1.8.2