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 -
            2025, 
            All Rights Reserved