1 #ifndef _LINUX_WAIT_H 2 #define _LINUX_WAIT_H 3 4 #define WNOHANG 0x00000001 5 #define WUNTRACED 0x00000002 6 #define WSTOPPED WUNTRACED 7 #define WEXITED 0x00000004 8 #define WCONTINUED 0x00000008 9 #define WNOWAIT 0x01000000 /* Don't reap, just poll status. */ 10 11 #define __WNOTHREAD 0x20000000 /* Don't wait on children of other threads in this group */ 12 #define __WALL 0x40000000 /* Wait on all children, regardless of type */ 13 #define __WCLONE 0x80000000 /* Wait only on non-SIGCHLD children */ 14 15 /* First argument to waitid: */ 16 #define P_ALL 0 17 #define P_PID 1 18 #define P_PGID 2 19 20 #ifdef __KERNEL__ 21 22 #include <linux/list.h> 23 #include <linux/stddef.h> 24 #include <linux/spinlock.h> 25 #include <asm/system.h> 26 #include <asm/current.h> 27 28 typedef struct __wait_queue wait_queue_t; 29 typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int sync, void *key); 30 int default_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); 31 32 struct __wait_queue { 33 unsigned int flags; 34 #define WQ_FLAG_EXCLUSIVE 0x01 35 void *private; 36 wait_queue_func_t func; 37 struct list_head task_list; 38 }; 39 40 struct wait_bit_key { 41 void *flags; 42 int bit_nr; 43 }; 44 45 struct wait_bit_queue { 46 struct wait_bit_key key; 47 wait_queue_t wait; 48 }; 49 50 struct __wait_queue_head { 51 spinlock_t lock; 52 struct list_head task_list; 53 }; 54 typedef struct __wait_queue_head wait_queue_head_t; 55 56 struct task_struct; 57 58 /* 59 * Macros for declaration and initialisaton of the datatypes 60 */ 61 62 #define __WAITQUEUE_INITIALIZER(name, tsk) { \ 63 .private = tsk, \ 64 .func = default_wake_function, \ 65 .task_list = { NULL, NULL } } 66 67 #define DECLARE_WAITQUEUE(name, tsk) \ 68 wait_queue_t name = __WAITQUEUE_INITIALIZER(name, tsk) 69 70 #define __WAIT_QUEUE_HEAD_INITIALIZER(name) { \ 71 .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ 72 .task_list = { &(name).task_list, &(name).task_list } } 73 74 #define DECLARE_WAIT_QUEUE_HEAD(name) \ 75 wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name) 76 77 #define __WAIT_BIT_KEY_INITIALIZER(word, bit) \ 78 { .flags = word, .bit_nr = bit, } 79 80 extern void init_waitqueue_head(wait_queue_head_t *q); 81 82 static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) 83 { 84 q->flags = 0; 85 q->private = p; 86 q->func = default_wake_function; 87 } 88 89 static inline void init_waitqueue_func_entry(wait_queue_t *q, 90 wait_queue_func_t func) 91 { 92 q->flags = 0; 93 q->private = NULL; 94 q->func = func; 95 } 96 97 static inline int waitqueue_active(wait_queue_head_t *q) 98 { 99 return !list_empty(&q->task_list); 100 } 101 102 /* 103 * Used to distinguish between sync and async io wait context: 104 * sync i/o typically specifies a NULL wait queue entry or a wait 105 * queue entry bound to a task (current task) to wake up. 106 * aio specifies a wait queue entry with an async notification 107 * callback routine, not associated with any task. 108 */ 109 #define is_sync_wait(wait) (!(wait) || ((wait)->private)) 110 111 extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)); 112 extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait)); 113 extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait)); 114 115 static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) 116 { 117 list_add(&new->task_list, &head->task_list); 118 } 119 120 /* 121 * Used for wake-one threads: 122 */ 123 static inline void __add_wait_queue_tail(wait_queue_head_t *head, 124 wait_queue_t *new) 125 { 126 list_add_tail(&new->task_list, &head->task_list); 127 } 128 129 static inline void __remove_wait_queue(wait_queue_head_t *head, 130 wait_queue_t *old) 131 { 132 list_del(&old->task_list); 133 } 134 135 void FASTCALL(__wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key)); 136 extern void FASTCALL(__wake_up_locked(wait_queue_head_t *q, unsigned int mode)); 137 extern void FASTCALL(__wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr)); 138 void FASTCALL(__wake_up_bit(wait_queue_head_t *, void *, int)); 139 int FASTCALL(__wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned)); 140 int FASTCALL(__wait_on_bit_lock(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned)); 141 void FASTCALL(wake_up_bit(void *, int)); 142 int FASTCALL(out_of_line_wait_on_bit(void *, int, int (*)(void *), unsigned)); 143 int FASTCALL(out_of_line_wait_on_bit_lock(void *, int, int (*)(void *), unsigned)); 144 wait_queue_head_t *FASTCALL(bit_waitqueue(void *, int)); 145 146 #define wake_up(x) __wake_up(x, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 1, NULL) 147 #define wake_up_nr(x, nr) __wake_up(x, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, nr, NULL) 148 #define wake_up_all(x) __wake_up(x, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, 0, NULL) 149 #define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL) 150 #define wake_up_interruptible_nr(x, nr) __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL) 151 #define wake_up_interruptible_all(x) __wake_up(x, TASK_INTERRUPTIBLE, 0, NULL) 152 #define wake_up_locked(x) __wake_up_locked((x), TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE) 153 #define wake_up_interruptible_sync(x) __wake_up_sync((x),TASK_INTERRUPTIBLE, 1) 154 155 #define __wait_event(wq, condition) \ 156 do { \ 157 DEFINE_WAIT(__wait); \ 158 \ 159 for (;;) { \ 160 prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ 161 if (condition) \ 162 break; \ 163 schedule(); \ 164 } \ 165 finish_wait(&wq, &__wait); \ 166 } while (0) 167 168 /** 169 * wait_event - sleep until a condition gets true 170 * @wq: the waitqueue to wait on 171 * @condition: a C expression for the event to wait for 172 * 173 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the 174 * @condition evaluates to true. The @condition is checked each time 175 * the waitqueue @wq is woken up. 176 * 177 * wake_up() has to be called after changing any variable that could 178 * change the result of the wait condition. 179 */ 180 #define wait_event(wq, condition) \ 181 do { \ 182 if (condition) \ 183 break; \ 184 __wait_event(wq, condition); \ 185 } while (0) 186 187 #define __wait_event_timeout(wq, condition, ret) \ 188 do { \ 189 DEFINE_WAIT(__wait); \ 190 \ 191 for (;;) { \ 192 prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ 193 if (condition) \ 194 break; \ 195 ret = schedule_timeout(ret); \ 196 if (!ret) \ 197 break; \ 198 } \ 199 finish_wait(&wq, &__wait); \ 200 } while (0) 201 202 /** 203 * wait_event_timeout - sleep until a condition gets true or a timeout elapses 204 * @wq: the waitqueue to wait on 205 * @condition: a C expression for the event to wait for 206 * @timeout: timeout, in jiffies 207 * 208 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the 209 * @condition evaluates to true. The @condition is checked each time 210 * the waitqueue @wq is woken up. 211 * 212 * wake_up() has to be called after changing any variable that could 213 * change the result of the wait condition. 214 * 215 * The function returns 0 if the @timeout elapsed, and the remaining 216 * jiffies if the condition evaluated to true before the timeout elapsed. 217 */ 218 #define wait_event_timeout(wq, condition, timeout) \ 219 ({ \ 220 long __ret = timeout; \ 221 if (!(condition)) \ 222 __wait_event_timeout(wq, condition, __ret); \ 223 __ret; \ 224 }) 225 226 #define __wait_event_interruptible(wq, condition, ret) \ 227 do { \ 228 DEFINE_WAIT(__wait); \ 229 \ 230 for (;;) { \ 231 prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ 232 if (condition) \ 233 break; \ 234 if (!signal_pending(current)) { \ 235 schedule(); \ 236 continue; \ 237 } \ 238 ret = -ERESTARTSYS; \ 239 break; \ 240 } \ 241 finish_wait(&wq, &__wait); \ 242 } while (0) 243 244 /** 245 * wait_event_interruptible - sleep until a condition gets true 246 * @wq: the waitqueue to wait on 247 * @condition: a C expression for the event to wait for 248 * 249 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 250 * @condition evaluates to true or a signal is received. 251 * The @condition is checked each time the waitqueue @wq is woken up. 252 * 253 * wake_up() has to be called after changing any variable that could 254 * change the result of the wait condition. 255 * 256 * The function will return -ERESTARTSYS if it was interrupted by a 257 * signal and 0 if @condition evaluated to true. 258 */ 259 #define wait_event_interruptible(wq, condition) \ 260 ({ \ 261 int __ret = 0; \ 262 if (!(condition)) \ 263 __wait_event_interruptible(wq, condition, __ret); \ 264 __ret; \ 265 }) 266 267 #define __wait_event_interruptible_timeout(wq, condition, ret) \ 268 do { \ 269 DEFINE_WAIT(__wait); \ 270 \ 271 for (;;) { \ 272 prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ 273 if (condition) \ 274 break; \ 275 if (!signal_pending(current)) { \ 276 ret = schedule_timeout(ret); \ 277 if (!ret) \ 278 break; \ 279 continue; \ 280 } \ 281 ret = -ERESTARTSYS; \ 282 break; \ 283 } \ 284 finish_wait(&wq, &__wait); \ 285 } while (0) 286 287 /** 288 * wait_event_interruptible_timeout - sleep until a condition gets true or a timeout elapses 289 * @wq: the waitqueue to wait on 290 * @condition: a C expression for the event to wait for 291 * @timeout: timeout, in jiffies 292 * 293 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 294 * @condition evaluates to true or a signal is received. 295 * The @condition is checked each time the waitqueue @wq is woken up. 296 * 297 * wake_up() has to be called after changing any variable that could 298 * change the result of the wait condition. 299 * 300 * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it 301 * was interrupted by a signal, and the remaining jiffies otherwise 302 * if the condition evaluated to true before the timeout elapsed. 303 */ 304 #define wait_event_interruptible_timeout(wq, condition, timeout) \ 305 ({ \ 306 long __ret = timeout; \ 307 if (!(condition)) \ 308 __wait_event_interruptible_timeout(wq, condition, __ret); \ 309 __ret; \ 310 }) 311 312 #define __wait_event_interruptible_exclusive(wq, condition, ret) \ 313 do { \ 314 DEFINE_WAIT(__wait); \ 315 \ 316 for (;;) { \ 317 prepare_to_wait_exclusive(&wq, &__wait, \ 318 TASK_INTERRUPTIBLE); \ 319 if (condition) \ 320 break; \ 321 if (!signal_pending(current)) { \ 322 schedule(); \ 323 continue; \ 324 } \ 325 ret = -ERESTARTSYS; \ 326 break; \ 327 } \ 328 finish_wait(&wq, &__wait); \ 329 } while (0) 330 331 #define wait_event_interruptible_exclusive(wq, condition) \ 332 ({ \ 333 int __ret = 0; \ 334 if (!(condition)) \ 335 __wait_event_interruptible_exclusive(wq, condition, __ret);\ 336 __ret; \ 337 }) 338 339 /* 340 * Must be called with the spinlock in the wait_queue_head_t held. 341 */ 342 static inline void add_wait_queue_exclusive_locked(wait_queue_head_t *q, 343 wait_queue_t * wait) 344 { 345 wait->flags |= WQ_FLAG_EXCLUSIVE; 346 __add_wait_queue_tail(q, wait); 347 } 348 349 /* 350 * Must be called with the spinlock in the wait_queue_head_t held. 351 */ 352 static inline void remove_wait_queue_locked(wait_queue_head_t *q, 353 wait_queue_t * wait) 354 { 355 __remove_wait_queue(q, wait); 356 } 357 358 /* 359 * These are the old interfaces to sleep waiting for an event. 360 * They are racy. DO NOT use them, use the wait_event* interfaces above. 361 * We plan to remove these interfaces during 2.7. 362 */ 363 extern void FASTCALL(sleep_on(wait_queue_head_t *q)); 364 extern long FASTCALL(sleep_on_timeout(wait_queue_head_t *q, 365 signed long timeout)); 366 extern void FASTCALL(interruptible_sleep_on(wait_queue_head_t *q)); 367 extern long FASTCALL(interruptible_sleep_on_timeout(wait_queue_head_t *q, 368 signed long timeout)); 369 370 /* 371 * Waitqueues which are removed from the waitqueue_head at wakeup time 372 */ 373 void FASTCALL(prepare_to_wait(wait_queue_head_t *q, 374 wait_queue_t *wait, int state)); 375 void FASTCALL(prepare_to_wait_exclusive(wait_queue_head_t *q, 376 wait_queue_t *wait, int state)); 377 void FASTCALL(finish_wait(wait_queue_head_t *q, wait_queue_t *wait)); 378 int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); 379 int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); 380 381 #define DEFINE_WAIT(name) \ 382 wait_queue_t name = { \ 383 .private = current, \ 384 .func = autoremove_wake_function, \ 385 .task_list = LIST_HEAD_INIT((name).task_list), \ 386 } 387 388 #define DEFINE_WAIT_BIT(name, word, bit) \ 389 struct wait_bit_queue name = { \ 390 .key = __WAIT_BIT_KEY_INITIALIZER(word, bit), \ 391 .wait = { \ 392 .private = current, \ 393 .func = wake_bit_function, \ 394 .task_list = \ 395 LIST_HEAD_INIT((name).wait.task_list), \ 396 }, \ 397 } 398 399 #define init_wait(wait) \ 400 do { \ 401 (wait)->private = current; \ 402 (wait)->func = autoremove_wake_function; \ 403 INIT_LIST_HEAD(&(wait)->task_list); \ 404 } while (0) 405 406 /** 407 * wait_on_bit - wait for a bit to be cleared 408 * @word: the word being waited on, a kernel virtual address 409 * @bit: the bit of the word being waited on 410 * @action: the function used to sleep, which may take special actions 411 * @mode: the task state to sleep in 412 * 413 * There is a standard hashed waitqueue table for generic use. This 414 * is the part of the hashtable's accessor API that waits on a bit. 415 * For instance, if one were to have waiters on a bitflag, one would 416 * call wait_on_bit() in threads waiting for the bit to clear. 417 * One uses wait_on_bit() where one is waiting for the bit to clear, 418 * but has no intention of setting it. 419 */ 420 static inline int wait_on_bit(void *word, int bit, 421 int (*action)(void *), unsigned mode) 422 { 423 if (!test_bit(bit, word)) 424 return 0; 425 return out_of_line_wait_on_bit(word, bit, action, mode); 426 } 427 428 /** 429 * wait_on_bit_lock - wait for a bit to be cleared, when wanting to set it 430 * @word: the word being waited on, a kernel virtual address 431 * @bit: the bit of the word being waited on 432 * @action: the function used to sleep, which may take special actions 433 * @mode: the task state to sleep in 434 * 435 * There is a standard hashed waitqueue table for generic use. This 436 * is the part of the hashtable's accessor API that waits on a bit 437 * when one intends to set it, for instance, trying to lock bitflags. 438 * For instance, if one were to have waiters trying to set bitflag 439 * and waiting for it to clear before setting it, one would call 440 * wait_on_bit() in threads waiting to be able to set the bit. 441 * One uses wait_on_bit_lock() where one is waiting for the bit to 442 * clear with the intention of setting it, and when done, clearing it. 443 */ 444 static inline int wait_on_bit_lock(void *word, int bit, 445 int (*action)(void *), unsigned mode) 446 { 447 if (!test_and_set_bit(bit, word)) 448 return 0; 449 return out_of_line_wait_on_bit_lock(word, bit, action, mode); 450 } 451 452 #endif /* __KERNEL__ */ 453 454 #endif 455