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 #ifdef CONFIG_LOCKDEP 83 # define __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) \ 84 ({ init_waitqueue_head(&name); name; }) 85 # define DECLARE_WAIT_QUEUE_HEAD_ONSTACK(name) \ 86 wait_queue_head_t name = __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) 87 #else 88 # define DECLARE_WAIT_QUEUE_HEAD_ONSTACK(name) DECLARE_WAIT_QUEUE_HEAD(name) 89 #endif 90 91 static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) 92 { 93 q->flags = 0; 94 q->private = p; 95 q->func = default_wake_function; 96 } 97 98 static inline void init_waitqueue_func_entry(wait_queue_t *q, 99 wait_queue_func_t func) 100 { 101 q->flags = 0; 102 q->private = NULL; 103 q->func = func; 104 } 105 106 static inline int waitqueue_active(wait_queue_head_t *q) 107 { 108 return !list_empty(&q->task_list); 109 } 110 111 /* 112 * Used to distinguish between sync and async io wait context: 113 * sync i/o typically specifies a NULL wait queue entry or a wait 114 * queue entry bound to a task (current task) to wake up. 115 * aio specifies a wait queue entry with an async notification 116 * callback routine, not associated with any task. 117 */ 118 #define is_sync_wait(wait) (!(wait) || ((wait)->private)) 119 120 extern void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait); 121 extern void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait); 122 extern void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait); 123 124 static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) 125 { 126 list_add(&new->task_list, &head->task_list); 127 } 128 129 /* 130 * Used for wake-one threads: 131 */ 132 static inline void __add_wait_queue_tail(wait_queue_head_t *head, 133 wait_queue_t *new) 134 { 135 list_add_tail(&new->task_list, &head->task_list); 136 } 137 138 static inline void __remove_wait_queue(wait_queue_head_t *head, 139 wait_queue_t *old) 140 { 141 list_del(&old->task_list); 142 } 143 144 void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); 145 extern void __wake_up_locked(wait_queue_head_t *q, unsigned int mode); 146 extern void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr); 147 void __wake_up_bit(wait_queue_head_t *, void *, int); 148 int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned); 149 int __wait_on_bit_lock(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned); 150 void wake_up_bit(void *, int); 151 int out_of_line_wait_on_bit(void *, int, int (*)(void *), unsigned); 152 int out_of_line_wait_on_bit_lock(void *, int, int (*)(void *), unsigned); 153 wait_queue_head_t *bit_waitqueue(void *, int); 154 155 #define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL) 156 #define wake_up_nr(x, nr) __wake_up(x, TASK_NORMAL, nr, NULL) 157 #define wake_up_all(x) __wake_up(x, TASK_NORMAL, 0, NULL) 158 #define wake_up_locked(x) __wake_up_locked((x), TASK_NORMAL) 159 160 #define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL) 161 #define wake_up_interruptible_nr(x, nr) __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL) 162 #define wake_up_interruptible_all(x) __wake_up(x, TASK_INTERRUPTIBLE, 0, NULL) 163 #define wake_up_interruptible_sync(x) __wake_up_sync((x), TASK_INTERRUPTIBLE, 1) 164 165 #ifdef CONFIG_DEBUG_LOCK_ALLOC 166 /* 167 * macro to avoid include hell 168 */ 169 #define wake_up_nested(x, s) \ 170 do { \ 171 unsigned long flags; \ 172 \ 173 spin_lock_irqsave_nested(&(x)->lock, flags, (s)); \ 174 wake_up_locked(x); \ 175 spin_unlock_irqrestore(&(x)->lock, flags); \ 176 } while (0) 177 #else 178 #define wake_up_nested(x, s) wake_up(x) 179 #endif 180 181 #define __wait_event(wq, condition) \ 182 do { \ 183 DEFINE_WAIT(__wait); \ 184 \ 185 for (;;) { \ 186 prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ 187 if (condition) \ 188 break; \ 189 schedule(); \ 190 } \ 191 finish_wait(&wq, &__wait); \ 192 } while (0) 193 194 /** 195 * wait_event - sleep until a condition gets true 196 * @wq: the waitqueue to wait on 197 * @condition: a C expression for the event to wait for 198 * 199 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the 200 * @condition evaluates to true. The @condition is checked each time 201 * the waitqueue @wq is woken up. 202 * 203 * wake_up() has to be called after changing any variable that could 204 * change the result of the wait condition. 205 */ 206 #define wait_event(wq, condition) \ 207 do { \ 208 if (condition) \ 209 break; \ 210 __wait_event(wq, condition); \ 211 } while (0) 212 213 #define __wait_event_timeout(wq, condition, ret) \ 214 do { \ 215 DEFINE_WAIT(__wait); \ 216 \ 217 for (;;) { \ 218 prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ 219 if (condition) \ 220 break; \ 221 ret = schedule_timeout(ret); \ 222 if (!ret) \ 223 break; \ 224 } \ 225 finish_wait(&wq, &__wait); \ 226 } while (0) 227 228 /** 229 * wait_event_timeout - sleep until a condition gets true or a timeout elapses 230 * @wq: the waitqueue to wait on 231 * @condition: a C expression for the event to wait for 232 * @timeout: timeout, in jiffies 233 * 234 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the 235 * @condition evaluates to true. The @condition is checked each time 236 * the waitqueue @wq is woken up. 237 * 238 * wake_up() has to be called after changing any variable that could 239 * change the result of the wait condition. 240 * 241 * The function returns 0 if the @timeout elapsed, and the remaining 242 * jiffies if the condition evaluated to true before the timeout elapsed. 243 */ 244 #define wait_event_timeout(wq, condition, timeout) \ 245 ({ \ 246 long __ret = timeout; \ 247 if (!(condition)) \ 248 __wait_event_timeout(wq, condition, __ret); \ 249 __ret; \ 250 }) 251 252 #define __wait_event_interruptible(wq, condition, ret) \ 253 do { \ 254 DEFINE_WAIT(__wait); \ 255 \ 256 for (;;) { \ 257 prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ 258 if (condition) \ 259 break; \ 260 if (!signal_pending(current)) { \ 261 schedule(); \ 262 continue; \ 263 } \ 264 ret = -ERESTARTSYS; \ 265 break; \ 266 } \ 267 finish_wait(&wq, &__wait); \ 268 } while (0) 269 270 /** 271 * wait_event_interruptible - sleep until a condition gets true 272 * @wq: the waitqueue to wait on 273 * @condition: a C expression for the event to wait for 274 * 275 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 276 * @condition evaluates to true or a signal is received. 277 * The @condition is checked each time the waitqueue @wq is woken up. 278 * 279 * wake_up() has to be called after changing any variable that could 280 * change the result of the wait condition. 281 * 282 * The function will return -ERESTARTSYS if it was interrupted by a 283 * signal and 0 if @condition evaluated to true. 284 */ 285 #define wait_event_interruptible(wq, condition) \ 286 ({ \ 287 int __ret = 0; \ 288 if (!(condition)) \ 289 __wait_event_interruptible(wq, condition, __ret); \ 290 __ret; \ 291 }) 292 293 #define __wait_event_interruptible_timeout(wq, condition, ret) \ 294 do { \ 295 DEFINE_WAIT(__wait); \ 296 \ 297 for (;;) { \ 298 prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ 299 if (condition) \ 300 break; \ 301 if (!signal_pending(current)) { \ 302 ret = schedule_timeout(ret); \ 303 if (!ret) \ 304 break; \ 305 continue; \ 306 } \ 307 ret = -ERESTARTSYS; \ 308 break; \ 309 } \ 310 finish_wait(&wq, &__wait); \ 311 } while (0) 312 313 /** 314 * wait_event_interruptible_timeout - sleep until a condition gets true or a timeout elapses 315 * @wq: the waitqueue to wait on 316 * @condition: a C expression for the event to wait for 317 * @timeout: timeout, in jiffies 318 * 319 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 320 * @condition evaluates to true or a signal is received. 321 * The @condition is checked each time the waitqueue @wq is woken up. 322 * 323 * wake_up() has to be called after changing any variable that could 324 * change the result of the wait condition. 325 * 326 * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it 327 * was interrupted by a signal, and the remaining jiffies otherwise 328 * if the condition evaluated to true before the timeout elapsed. 329 */ 330 #define wait_event_interruptible_timeout(wq, condition, timeout) \ 331 ({ \ 332 long __ret = timeout; \ 333 if (!(condition)) \ 334 __wait_event_interruptible_timeout(wq, condition, __ret); \ 335 __ret; \ 336 }) 337 338 #define __wait_event_interruptible_exclusive(wq, condition, ret) \ 339 do { \ 340 DEFINE_WAIT(__wait); \ 341 \ 342 for (;;) { \ 343 prepare_to_wait_exclusive(&wq, &__wait, \ 344 TASK_INTERRUPTIBLE); \ 345 if (condition) \ 346 break; \ 347 if (!signal_pending(current)) { \ 348 schedule(); \ 349 continue; \ 350 } \ 351 ret = -ERESTARTSYS; \ 352 break; \ 353 } \ 354 finish_wait(&wq, &__wait); \ 355 } while (0) 356 357 #define wait_event_interruptible_exclusive(wq, condition) \ 358 ({ \ 359 int __ret = 0; \ 360 if (!(condition)) \ 361 __wait_event_interruptible_exclusive(wq, condition, __ret);\ 362 __ret; \ 363 }) 364 365 #define __wait_event_killable(wq, condition, ret) \ 366 do { \ 367 DEFINE_WAIT(__wait); \ 368 \ 369 for (;;) { \ 370 prepare_to_wait(&wq, &__wait, TASK_KILLABLE); \ 371 if (condition) \ 372 break; \ 373 if (!fatal_signal_pending(current)) { \ 374 schedule(); \ 375 continue; \ 376 } \ 377 ret = -ERESTARTSYS; \ 378 break; \ 379 } \ 380 finish_wait(&wq, &__wait); \ 381 } while (0) 382 383 /** 384 * wait_event_killable - sleep until a condition gets true 385 * @wq: the waitqueue to wait on 386 * @condition: a C expression for the event to wait for 387 * 388 * The process is put to sleep (TASK_KILLABLE) until the 389 * @condition evaluates to true or a signal is received. 390 * The @condition is checked each time the waitqueue @wq is woken up. 391 * 392 * wake_up() has to be called after changing any variable that could 393 * change the result of the wait condition. 394 * 395 * The function will return -ERESTARTSYS if it was interrupted by a 396 * signal and 0 if @condition evaluated to true. 397 */ 398 #define wait_event_killable(wq, condition) \ 399 ({ \ 400 int __ret = 0; \ 401 if (!(condition)) \ 402 __wait_event_killable(wq, condition, __ret); \ 403 __ret; \ 404 }) 405 406 /* 407 * Must be called with the spinlock in the wait_queue_head_t held. 408 */ 409 static inline void add_wait_queue_exclusive_locked(wait_queue_head_t *q, 410 wait_queue_t * wait) 411 { 412 wait->flags |= WQ_FLAG_EXCLUSIVE; 413 __add_wait_queue_tail(q, wait); 414 } 415 416 /* 417 * Must be called with the spinlock in the wait_queue_head_t held. 418 */ 419 static inline void remove_wait_queue_locked(wait_queue_head_t *q, 420 wait_queue_t * wait) 421 { 422 __remove_wait_queue(q, wait); 423 } 424 425 /* 426 * These are the old interfaces to sleep waiting for an event. 427 * They are racy. DO NOT use them, use the wait_event* interfaces above. 428 * We plan to remove these interfaces. 429 */ 430 extern void sleep_on(wait_queue_head_t *q); 431 extern long sleep_on_timeout(wait_queue_head_t *q, 432 signed long timeout); 433 extern void interruptible_sleep_on(wait_queue_head_t *q); 434 extern long interruptible_sleep_on_timeout(wait_queue_head_t *q, 435 signed long timeout); 436 437 /* 438 * Waitqueues which are removed from the waitqueue_head at wakeup time 439 */ 440 void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state); 441 void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state); 442 void finish_wait(wait_queue_head_t *q, wait_queue_t *wait); 443 int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); 444 int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); 445 446 #define DEFINE_WAIT(name) \ 447 wait_queue_t name = { \ 448 .private = current, \ 449 .func = autoremove_wake_function, \ 450 .task_list = LIST_HEAD_INIT((name).task_list), \ 451 } 452 453 #define DEFINE_WAIT_BIT(name, word, bit) \ 454 struct wait_bit_queue name = { \ 455 .key = __WAIT_BIT_KEY_INITIALIZER(word, bit), \ 456 .wait = { \ 457 .private = current, \ 458 .func = wake_bit_function, \ 459 .task_list = \ 460 LIST_HEAD_INIT((name).wait.task_list), \ 461 }, \ 462 } 463 464 #define init_wait(wait) \ 465 do { \ 466 (wait)->private = current; \ 467 (wait)->func = autoremove_wake_function; \ 468 INIT_LIST_HEAD(&(wait)->task_list); \ 469 } while (0) 470 471 /** 472 * wait_on_bit - wait for a bit to be cleared 473 * @word: the word being waited on, a kernel virtual address 474 * @bit: the bit of the word being waited on 475 * @action: the function used to sleep, which may take special actions 476 * @mode: the task state to sleep in 477 * 478 * There is a standard hashed waitqueue table for generic use. This 479 * is the part of the hashtable's accessor API that waits on a bit. 480 * For instance, if one were to have waiters on a bitflag, one would 481 * call wait_on_bit() in threads waiting for the bit to clear. 482 * One uses wait_on_bit() where one is waiting for the bit to clear, 483 * but has no intention of setting it. 484 */ 485 static inline int wait_on_bit(void *word, int bit, 486 int (*action)(void *), unsigned mode) 487 { 488 if (!test_bit(bit, word)) 489 return 0; 490 return out_of_line_wait_on_bit(word, bit, action, mode); 491 } 492 493 /** 494 * wait_on_bit_lock - wait for a bit to be cleared, when wanting to set it 495 * @word: the word being waited on, a kernel virtual address 496 * @bit: the bit of the word being waited on 497 * @action: the function used to sleep, which may take special actions 498 * @mode: the task state to sleep in 499 * 500 * There is a standard hashed waitqueue table for generic use. This 501 * is the part of the hashtable's accessor API that waits on a bit 502 * when one intends to set it, for instance, trying to lock bitflags. 503 * For instance, if one were to have waiters trying to set bitflag 504 * and waiting for it to clear before setting it, one would call 505 * wait_on_bit() in threads waiting to be able to set the bit. 506 * One uses wait_on_bit_lock() where one is waiting for the bit to 507 * clear with the intention of setting it, and when done, clearing it. 508 */ 509 static inline int wait_on_bit_lock(void *word, int bit, 510 int (*action)(void *), unsigned mode) 511 { 512 if (!test_and_set_bit(bit, word)) 513 return 0; 514 return out_of_line_wait_on_bit_lock(word, bit, action, mode); 515 } 516 517 #endif /* __KERNEL__ */ 518 519 #endif 520