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
include
linux
rtmutex.h
Go to the documentation of this file.
1
/*
2
* RT Mutexes: blocking mutual exclusion locks with PI support
3
*
4
* started by Ingo Molnar and Thomas Gleixner:
5
*
6
* Copyright (C) 2004-2006 Red Hat, Inc., Ingo Molnar <
[email protected]
>
7
* Copyright (C) 2006, Timesys Corp., Thomas Gleixner <
[email protected]
>
8
*
9
* This file contains the public data structure and API definitions.
10
*/
11
12
#ifndef __LINUX_RT_MUTEX_H
13
#define __LINUX_RT_MUTEX_H
14
15
#include <linux/linkage.h>
16
#include <
linux/plist.h
>
17
#include <
linux/spinlock_types.h
>
18
19
extern
int
max_lock_depth
;
/* for sysctl */
20
28
struct
rt_mutex
{
29
raw_spinlock_t
wait_lock
;
30
struct
plist_head
wait_list
;
31
struct
task_struct
*
owner
;
32
#ifdef CONFIG_DEBUG_RT_MUTEXES
33
int
save_state;
34
const
char
*
name
, *
file
;
35
int
line
;
36
void
*
magic
;
37
#endif
38
};
39
40
struct
rt_mutex_waiter
;
41
struct
hrtimer_sleeper
;
42
43
#ifdef CONFIG_DEBUG_RT_MUTEXES
44
extern
int
rt_mutex_debug_check_no_locks_freed(
const
void
*
from
,
45
unsigned
long
len);
46
extern
void
rt_mutex_debug_check_no_locks_held
(
struct
task_struct
*
task
);
47
#else
48
static
inline
int
rt_mutex_debug_check_no_locks_freed(
const
void
*
from
,
49
unsigned
long
len)
50
{
51
return
0;
52
}
53
# define rt_mutex_debug_check_no_locks_held(task) do { } while (0)
54
#endif
55
56
#ifdef CONFIG_DEBUG_RT_MUTEXES
57
# define __DEBUG_RT_MUTEX_INITIALIZER(mutexname) \
58
, .name = #mutexname, .file = __FILE__, .line = __LINE__
59
# define rt_mutex_init(mutex) __rt_mutex_init(mutex, __func__)
60
extern
void
rt_mutex_debug_task_free
(
struct
task_struct
*tsk);
61
#else
62
# define __DEBUG_RT_MUTEX_INITIALIZER(mutexname)
63
# define rt_mutex_init(mutex) __rt_mutex_init(mutex, NULL)
64
# define rt_mutex_debug_task_free(t) do { } while (0)
65
#endif
66
67
#define __RT_MUTEX_INITIALIZER(mutexname) \
68
{ .wait_lock = __RAW_SPIN_LOCK_UNLOCKED(mutexname.wait_lock) \
69
, .wait_list = PLIST_HEAD_INIT(mutexname.wait_list) \
70
, .owner = NULL \
71
__DEBUG_RT_MUTEX_INITIALIZER(mutexname)}
72
73
#define DEFINE_RT_MUTEX(mutexname) \
74
struct rt_mutex mutexname = __RT_MUTEX_INITIALIZER(mutexname)
75
82
static
inline
int
rt_mutex_is_locked(
struct
rt_mutex
*lock)
83
{
84
return
lock->
owner
!=
NULL
;
85
}
86
87
extern
void
__rt_mutex_init
(
struct
rt_mutex
*lock,
const
char
*
name
);
88
extern
void
rt_mutex_destroy
(
struct
rt_mutex
*lock);
89
90
extern
void
rt_mutex_lock
(
struct
rt_mutex
*lock);
91
extern
int
rt_mutex_lock_interruptible
(
struct
rt_mutex
*lock,
92
int
detect_deadlock);
93
extern
int
rt_mutex_timed_lock
(
struct
rt_mutex
*lock,
94
struct
hrtimer_sleeper
*timeout,
95
int
detect_deadlock);
96
97
extern
int
rt_mutex_trylock
(
struct
rt_mutex
*lock);
98
99
extern
void
rt_mutex_unlock
(
struct
rt_mutex
*lock);
100
101
#ifdef CONFIG_RT_MUTEXES
102
# define INIT_RT_MUTEXES(tsk) \
103
.pi_waiters = PLIST_HEAD_INIT(tsk.pi_waiters), \
104
INIT_RT_MUTEX_DEBUG(tsk)
105
#else
106
# define INIT_RT_MUTEXES(tsk)
107
#endif
108
109
#endif
Generated on Thu Jan 10 2013 14:52:29 for Linux Kernel by
1.8.2