futex.h
001: #ifndef _LINUX_FUTEX_H
002: #define _LINUX_FUTEX_H
003:
004:
005: #include <linux/types.h>
006:
007:
008:
009:
010: #define FUTEX_WAIT 0
011: #define FUTEX_WAKE 1
012: #define FUTEX_FD 2
013: #define FUTEX_REQUEUE 3
014: #define FUTEX_CMP_REQUEUE 4
015: #define FUTEX_WAKE_OP 5
016: #define FUTEX_LOCK_PI 6
017: #define FUTEX_UNLOCK_PI 7
018: #define FUTEX_TRYLOCK_PI 8
019: #define FUTEX_WAIT_BITSET 9
020: #define FUTEX_WAKE_BITSET 10
021: #define FUTEX_WAIT_REQUEUE_PI 11
022: #define FUTEX_CMP_REQUEUE_PI 12
023:
024: #define FUTEX_PRIVATE_FLAG 128
025: #define FUTEX_CLOCK_REALTIME 256
026: #define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
027:
028: #define FUTEX_WAIT_PRIVATE (FUTEX_WAIT | FUTEX_PRIVATE_FLAG)
029: #define FUTEX_WAKE_PRIVATE (FUTEX_WAKE | FUTEX_PRIVATE_FLAG)
030: #define FUTEX_REQUEUE_PRIVATE (FUTEX_REQUEUE | FUTEX_PRIVATE_FLAG)
031: #define FUTEX_CMP_REQUEUE_PRIVATE (FUTEX_CMP_REQUEUE | FUTEX_PRIVATE_FLAG)
032: #define FUTEX_WAKE_OP_PRIVATE (FUTEX_WAKE_OP | FUTEX_PRIVATE_FLAG)
033: #define FUTEX_LOCK_PI_PRIVATE (FUTEX_LOCK_PI | FUTEX_PRIVATE_FLAG)
034: #define FUTEX_UNLOCK_PI_PRIVATE (FUTEX_UNLOCK_PI | FUTEX_PRIVATE_FLAG)
035: #define FUTEX_TRYLOCK_PI_PRIVATE (FUTEX_TRYLOCK_PI | FUTEX_PRIVATE_FLAG)
036: #define FUTEX_WAIT_BITSET_PRIVATE (FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG)
037: #define FUTEX_WAKE_BITSET_PRIVATE (FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG)
038: #define FUTEX_WAIT_REQUEUE_PI_PRIVATE (FUTEX_WAIT_REQUEUE_PI | \
039: FUTEX_PRIVATE_FLAG)
040: #define FUTEX_CMP_REQUEUE_PI_PRIVATE (FUTEX_CMP_REQUEUE_PI | \
041: FUTEX_PRIVATE_FLAG)
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057: struct robust_list {
058: struct robust_list *next;
059: };
060:
061:
062:
063:
064:
065:
066:
067:
068:
069: struct robust_list_head {
070:
071:
072:
073: struct robust_list list;
074:
075:
076:
077:
078:
079:
080:
081: long futex_offset;
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093: struct robust_list *list_op_pending;
094: };
095:
096:
097:
098:
099: #define FUTEX_WAITERS 0x80000000
100:
101:
102:
103:
104:
105:
106:
107: #define FUTEX_OWNER_DIED 0x40000000
108:
109:
110:
111:
112: #define FUTEX_TID_MASK 0x3fffffff
113:
114:
115:
116:
117:
118: #define ROBUST_LIST_LIMIT 2048
119:
120:
121:
122:
123:
124: #define FUTEX_BITSET_MATCH_ANY 0xffffffff
125:
126:
127: #define FUTEX_OP_SET 0
128: #define FUTEX_OP_ADD 1
129: #define FUTEX_OP_OR 2
130: #define FUTEX_OP_ANDN 3
131: #define FUTEX_OP_XOR 4
132:
133: #define FUTEX_OP_OPARG_SHIFT 8
134:
135: #define FUTEX_OP_CMP_EQ 0
136: #define FUTEX_OP_CMP_NE 1
137: #define FUTEX_OP_CMP_LT 2
138: #define FUTEX_OP_CMP_LE 3
139: #define FUTEX_OP_CMP_GT 4
140: #define FUTEX_OP_CMP_GE 5
141:
142:
143:
144:
145:
146:
147:
148: #define FUTEX_OP(op, oparg, cmp, cmparg) \
149: (((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
150: | ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
151:
152: #endif
153:
© Andrew Scott 2006 -
2024,
All Rights Reserved