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
futex.h
Go to the documentation of this file.
1
#ifndef _LINUX_FUTEX_H
2
#define _LINUX_FUTEX_H
3
4
#include <
uapi/linux/futex.h
>
5
6
struct
inode
;
7
struct
mm_struct
;
8
struct
task_struct
;
9
union
ktime
;
10
11
long
do_futex
(
u32
__user *
uaddr
,
int
op
,
u32
val
,
union
ktime
*timeout,
12
u32
__user *uaddr2,
u32
val2,
u32
val3);
13
14
extern
int
15
handle_futex_death
(
u32
__user *
uaddr
,
struct
task_struct
*
curr
,
int
pi);
16
17
/*
18
* Futexes are matched on equal values of this key.
19
* The key type depends on whether it's a shared or private mapping.
20
* Don't rearrange members without looking at hash_futex().
21
*
22
* offset is aligned to a multiple of sizeof(u32) (== 4) by definition.
23
* We use the two low order bits of offset to tell what is the kind of key :
24
* 00 : Private process futex (PTHREAD_PROCESS_PRIVATE)
25
* (no reference on an inode or mm)
26
* 01 : Shared futex (PTHREAD_PROCESS_SHARED)
27
* mapped on a file (reference on the underlying inode)
28
* 10 : Shared futex (PTHREAD_PROCESS_SHARED)
29
* (but private mapping on an mm, and reference taken on it)
30
*/
31
32
#define FUT_OFF_INODE 1
/* We set bit 0 if key has a reference on inode */
33
#define FUT_OFF_MMSHARED 2
/* We set bit 1 if key has a reference on mm */
34
35
union
futex_key
{
36
struct
{
37
unsigned
long
pgoff
;
38
struct
inode
*
inode
;
39
int
offset
;
40
}
shared
;
41
struct
{
42
unsigned
long
address
;
43
struct
mm_struct
*
mm
;
44
int
offset
;
45
}
private
;
46
struct
{
47
unsigned
long
word
;
48
void
*
ptr
;
49
int
offset
;
50
}
both
;
51
};
52
53
#define FUTEX_KEY_INIT (union futex_key) { .both = { .ptr = NULL } }
54
55
#ifdef CONFIG_FUTEX
56
extern
void
exit_robust_list
(
struct
task_struct
*
curr
);
57
extern
void
exit_pi_state_list
(
struct
task_struct
*
curr
);
58
extern
int
futex_cmpxchg_enabled
;
59
#else
60
static
inline
void
exit_robust_list
(
struct
task_struct
*
curr
)
61
{
62
}
63
static
inline
void
exit_pi_state_list
(
struct
task_struct
*
curr
)
64
{
65
}
66
#endif
67
#endif
Generated on Thu Jan 10 2013 12:49:39 for Linux Kernel by
1.8.2