at v3.7-rc1 21 kB view raw
1#ifndef _LINUX_WAIT_H 2#define _LINUX_WAIT_H 3 4 5#include <linux/list.h> 6#include <linux/stddef.h> 7#include <linux/spinlock.h> 8#include <asm/current.h> 9#include <uapi/linux/wait.h> 10 11typedef struct __wait_queue wait_queue_t; 12typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, void *key); 13int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key); 14 15struct __wait_queue { 16 unsigned int flags; 17#define WQ_FLAG_EXCLUSIVE 0x01 18 void *private; 19 wait_queue_func_t func; 20 struct list_head task_list; 21}; 22 23struct wait_bit_key { 24 void *flags; 25 int bit_nr; 26}; 27 28struct wait_bit_queue { 29 struct wait_bit_key key; 30 wait_queue_t wait; 31}; 32 33struct __wait_queue_head { 34 spinlock_t lock; 35 struct list_head task_list; 36}; 37typedef struct __wait_queue_head wait_queue_head_t; 38 39struct task_struct; 40 41/* 42 * Macros for declaration and initialisaton of the datatypes 43 */ 44 45#define __WAITQUEUE_INITIALIZER(name, tsk) { \ 46 .private = tsk, \ 47 .func = default_wake_function, \ 48 .task_list = { NULL, NULL } } 49 50#define DECLARE_WAITQUEUE(name, tsk) \ 51 wait_queue_t name = __WAITQUEUE_INITIALIZER(name, tsk) 52 53#define __WAIT_QUEUE_HEAD_INITIALIZER(name) { \ 54 .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ 55 .task_list = { &(name).task_list, &(name).task_list } } 56 57#define DECLARE_WAIT_QUEUE_HEAD(name) \ 58 wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name) 59 60#define __WAIT_BIT_KEY_INITIALIZER(word, bit) \ 61 { .flags = word, .bit_nr = bit, } 62 63extern void __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct lock_class_key *); 64 65#define init_waitqueue_head(q) \ 66 do { \ 67 static struct lock_class_key __key; \ 68 \ 69 __init_waitqueue_head((q), #q, &__key); \ 70 } while (0) 71 72#ifdef CONFIG_LOCKDEP 73# define __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) \ 74 ({ init_waitqueue_head(&name); name; }) 75# define DECLARE_WAIT_QUEUE_HEAD_ONSTACK(name) \ 76 wait_queue_head_t name = __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) 77#else 78# define DECLARE_WAIT_QUEUE_HEAD_ONSTACK(name) DECLARE_WAIT_QUEUE_HEAD(name) 79#endif 80 81static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) 82{ 83 q->flags = 0; 84 q->private = p; 85 q->func = default_wake_function; 86} 87 88static inline void init_waitqueue_func_entry(wait_queue_t *q, 89 wait_queue_func_t func) 90{ 91 q->flags = 0; 92 q->private = NULL; 93 q->func = func; 94} 95 96static inline int waitqueue_active(wait_queue_head_t *q) 97{ 98 return !list_empty(&q->task_list); 99} 100 101extern void add_wait_queue(wait_queue_head_t *q, wait_queue_t *wait); 102extern void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait); 103extern void remove_wait_queue(wait_queue_head_t *q, wait_queue_t *wait); 104 105static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) 106{ 107 list_add(&new->task_list, &head->task_list); 108} 109 110/* 111 * Used for wake-one threads: 112 */ 113static inline void __add_wait_queue_exclusive(wait_queue_head_t *q, 114 wait_queue_t *wait) 115{ 116 wait->flags |= WQ_FLAG_EXCLUSIVE; 117 __add_wait_queue(q, wait); 118} 119 120static inline void __add_wait_queue_tail(wait_queue_head_t *head, 121 wait_queue_t *new) 122{ 123 list_add_tail(&new->task_list, &head->task_list); 124} 125 126static inline void __add_wait_queue_tail_exclusive(wait_queue_head_t *q, 127 wait_queue_t *wait) 128{ 129 wait->flags |= WQ_FLAG_EXCLUSIVE; 130 __add_wait_queue_tail(q, wait); 131} 132 133static inline void __remove_wait_queue(wait_queue_head_t *head, 134 wait_queue_t *old) 135{ 136 list_del(&old->task_list); 137} 138 139void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); 140void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key); 141void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, 142 void *key); 143void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr); 144void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr); 145void __wake_up_bit(wait_queue_head_t *, void *, int); 146int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned); 147int __wait_on_bit_lock(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned); 148void wake_up_bit(void *, int); 149int out_of_line_wait_on_bit(void *, int, int (*)(void *), unsigned); 150int out_of_line_wait_on_bit_lock(void *, int, int (*)(void *), unsigned); 151wait_queue_head_t *bit_waitqueue(void *, int); 152 153#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL) 154#define wake_up_nr(x, nr) __wake_up(x, TASK_NORMAL, nr, NULL) 155#define wake_up_all(x) __wake_up(x, TASK_NORMAL, 0, NULL) 156#define wake_up_locked(x) __wake_up_locked((x), TASK_NORMAL, 1) 157#define wake_up_all_locked(x) __wake_up_locked((x), TASK_NORMAL, 0) 158 159#define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL) 160#define wake_up_interruptible_nr(x, nr) __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL) 161#define wake_up_interruptible_all(x) __wake_up(x, TASK_INTERRUPTIBLE, 0, NULL) 162#define wake_up_interruptible_sync(x) __wake_up_sync((x), TASK_INTERRUPTIBLE, 1) 163 164/* 165 * Wakeup macros to be used to report events to the targets. 166 */ 167#define wake_up_poll(x, m) \ 168 __wake_up(x, TASK_NORMAL, 1, (void *) (m)) 169#define wake_up_locked_poll(x, m) \ 170 __wake_up_locked_key((x), TASK_NORMAL, (void *) (m)) 171#define wake_up_interruptible_poll(x, m) \ 172 __wake_up(x, TASK_INTERRUPTIBLE, 1, (void *) (m)) 173#define wake_up_interruptible_sync_poll(x, m) \ 174 __wake_up_sync_key((x), TASK_INTERRUPTIBLE, 1, (void *) (m)) 175 176#define __wait_event(wq, condition) \ 177do { \ 178 DEFINE_WAIT(__wait); \ 179 \ 180 for (;;) { \ 181 prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ 182 if (condition) \ 183 break; \ 184 schedule(); \ 185 } \ 186 finish_wait(&wq, &__wait); \ 187} while (0) 188 189/** 190 * wait_event - sleep until a condition gets true 191 * @wq: the waitqueue to wait on 192 * @condition: a C expression for the event to wait for 193 * 194 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the 195 * @condition evaluates to true. The @condition is checked each time 196 * the waitqueue @wq is woken up. 197 * 198 * wake_up() has to be called after changing any variable that could 199 * change the result of the wait condition. 200 */ 201#define wait_event(wq, condition) \ 202do { \ 203 if (condition) \ 204 break; \ 205 __wait_event(wq, condition); \ 206} while (0) 207 208#define __wait_event_timeout(wq, condition, ret) \ 209do { \ 210 DEFINE_WAIT(__wait); \ 211 \ 212 for (;;) { \ 213 prepare_to_wait(&wq, &__wait, TASK_UNINTERRUPTIBLE); \ 214 if (condition) \ 215 break; \ 216 ret = schedule_timeout(ret); \ 217 if (!ret) \ 218 break; \ 219 } \ 220 finish_wait(&wq, &__wait); \ 221} while (0) 222 223/** 224 * wait_event_timeout - sleep until a condition gets true or a timeout elapses 225 * @wq: the waitqueue to wait on 226 * @condition: a C expression for the event to wait for 227 * @timeout: timeout, in jiffies 228 * 229 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the 230 * @condition evaluates to true. The @condition is checked each time 231 * the waitqueue @wq is woken up. 232 * 233 * wake_up() has to be called after changing any variable that could 234 * change the result of the wait condition. 235 * 236 * The function returns 0 if the @timeout elapsed, and the remaining 237 * jiffies if the condition evaluated to true before the timeout elapsed. 238 */ 239#define wait_event_timeout(wq, condition, timeout) \ 240({ \ 241 long __ret = timeout; \ 242 if (!(condition)) \ 243 __wait_event_timeout(wq, condition, __ret); \ 244 __ret; \ 245}) 246 247#define __wait_event_interruptible(wq, condition, ret) \ 248do { \ 249 DEFINE_WAIT(__wait); \ 250 \ 251 for (;;) { \ 252 prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ 253 if (condition) \ 254 break; \ 255 if (!signal_pending(current)) { \ 256 schedule(); \ 257 continue; \ 258 } \ 259 ret = -ERESTARTSYS; \ 260 break; \ 261 } \ 262 finish_wait(&wq, &__wait); \ 263} while (0) 264 265/** 266 * wait_event_interruptible - sleep until a condition gets true 267 * @wq: the waitqueue to wait on 268 * @condition: a C expression for the event to wait for 269 * 270 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 271 * @condition evaluates to true or a signal is received. 272 * The @condition is checked each time the waitqueue @wq is woken up. 273 * 274 * wake_up() has to be called after changing any variable that could 275 * change the result of the wait condition. 276 * 277 * The function will return -ERESTARTSYS if it was interrupted by a 278 * signal and 0 if @condition evaluated to true. 279 */ 280#define wait_event_interruptible(wq, condition) \ 281({ \ 282 int __ret = 0; \ 283 if (!(condition)) \ 284 __wait_event_interruptible(wq, condition, __ret); \ 285 __ret; \ 286}) 287 288#define __wait_event_interruptible_timeout(wq, condition, ret) \ 289do { \ 290 DEFINE_WAIT(__wait); \ 291 \ 292 for (;;) { \ 293 prepare_to_wait(&wq, &__wait, TASK_INTERRUPTIBLE); \ 294 if (condition) \ 295 break; \ 296 if (!signal_pending(current)) { \ 297 ret = schedule_timeout(ret); \ 298 if (!ret) \ 299 break; \ 300 continue; \ 301 } \ 302 ret = -ERESTARTSYS; \ 303 break; \ 304 } \ 305 finish_wait(&wq, &__wait); \ 306} while (0) 307 308/** 309 * wait_event_interruptible_timeout - sleep until a condition gets true or a timeout elapses 310 * @wq: the waitqueue to wait on 311 * @condition: a C expression for the event to wait for 312 * @timeout: timeout, in jiffies 313 * 314 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 315 * @condition evaluates to true or a signal is received. 316 * The @condition is checked each time the waitqueue @wq is woken up. 317 * 318 * wake_up() has to be called after changing any variable that could 319 * change the result of the wait condition. 320 * 321 * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it 322 * was interrupted by a signal, and the remaining jiffies otherwise 323 * if the condition evaluated to true before the timeout elapsed. 324 */ 325#define wait_event_interruptible_timeout(wq, condition, timeout) \ 326({ \ 327 long __ret = timeout; \ 328 if (!(condition)) \ 329 __wait_event_interruptible_timeout(wq, condition, __ret); \ 330 __ret; \ 331}) 332 333#define __wait_event_interruptible_exclusive(wq, condition, ret) \ 334do { \ 335 DEFINE_WAIT(__wait); \ 336 \ 337 for (;;) { \ 338 prepare_to_wait_exclusive(&wq, &__wait, \ 339 TASK_INTERRUPTIBLE); \ 340 if (condition) { \ 341 finish_wait(&wq, &__wait); \ 342 break; \ 343 } \ 344 if (!signal_pending(current)) { \ 345 schedule(); \ 346 continue; \ 347 } \ 348 ret = -ERESTARTSYS; \ 349 abort_exclusive_wait(&wq, &__wait, \ 350 TASK_INTERRUPTIBLE, NULL); \ 351 break; \ 352 } \ 353} while (0) 354 355#define wait_event_interruptible_exclusive(wq, condition) \ 356({ \ 357 int __ret = 0; \ 358 if (!(condition)) \ 359 __wait_event_interruptible_exclusive(wq, condition, __ret);\ 360 __ret; \ 361}) 362 363 364#define __wait_event_interruptible_locked(wq, condition, exclusive, irq) \ 365({ \ 366 int __ret = 0; \ 367 DEFINE_WAIT(__wait); \ 368 if (exclusive) \ 369 __wait.flags |= WQ_FLAG_EXCLUSIVE; \ 370 do { \ 371 if (likely(list_empty(&__wait.task_list))) \ 372 __add_wait_queue_tail(&(wq), &__wait); \ 373 set_current_state(TASK_INTERRUPTIBLE); \ 374 if (signal_pending(current)) { \ 375 __ret = -ERESTARTSYS; \ 376 break; \ 377 } \ 378 if (irq) \ 379 spin_unlock_irq(&(wq).lock); \ 380 else \ 381 spin_unlock(&(wq).lock); \ 382 schedule(); \ 383 if (irq) \ 384 spin_lock_irq(&(wq).lock); \ 385 else \ 386 spin_lock(&(wq).lock); \ 387 } while (!(condition)); \ 388 __remove_wait_queue(&(wq), &__wait); \ 389 __set_current_state(TASK_RUNNING); \ 390 __ret; \ 391}) 392 393 394/** 395 * wait_event_interruptible_locked - sleep until a condition gets true 396 * @wq: the waitqueue to wait on 397 * @condition: a C expression for the event to wait for 398 * 399 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 400 * @condition evaluates to true or a signal is received. 401 * The @condition is checked each time the waitqueue @wq is woken up. 402 * 403 * It must be called with wq.lock being held. This spinlock is 404 * unlocked while sleeping but @condition testing is done while lock 405 * is held and when this macro exits the lock is held. 406 * 407 * The lock is locked/unlocked using spin_lock()/spin_unlock() 408 * functions which must match the way they are locked/unlocked outside 409 * of this macro. 410 * 411 * wake_up_locked() has to be called after changing any variable that could 412 * change the result of the wait condition. 413 * 414 * The function will return -ERESTARTSYS if it was interrupted by a 415 * signal and 0 if @condition evaluated to true. 416 */ 417#define wait_event_interruptible_locked(wq, condition) \ 418 ((condition) \ 419 ? 0 : __wait_event_interruptible_locked(wq, condition, 0, 0)) 420 421/** 422 * wait_event_interruptible_locked_irq - sleep until a condition gets true 423 * @wq: the waitqueue to wait on 424 * @condition: a C expression for the event to wait for 425 * 426 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 427 * @condition evaluates to true or a signal is received. 428 * The @condition is checked each time the waitqueue @wq is woken up. 429 * 430 * It must be called with wq.lock being held. This spinlock is 431 * unlocked while sleeping but @condition testing is done while lock 432 * is held and when this macro exits the lock is held. 433 * 434 * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() 435 * functions which must match the way they are locked/unlocked outside 436 * of this macro. 437 * 438 * wake_up_locked() has to be called after changing any variable that could 439 * change the result of the wait condition. 440 * 441 * The function will return -ERESTARTSYS if it was interrupted by a 442 * signal and 0 if @condition evaluated to true. 443 */ 444#define wait_event_interruptible_locked_irq(wq, condition) \ 445 ((condition) \ 446 ? 0 : __wait_event_interruptible_locked(wq, condition, 0, 1)) 447 448/** 449 * wait_event_interruptible_exclusive_locked - sleep exclusively until a condition gets true 450 * @wq: the waitqueue to wait on 451 * @condition: a C expression for the event to wait for 452 * 453 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 454 * @condition evaluates to true or a signal is received. 455 * The @condition is checked each time the waitqueue @wq is woken up. 456 * 457 * It must be called with wq.lock being held. This spinlock is 458 * unlocked while sleeping but @condition testing is done while lock 459 * is held and when this macro exits the lock is held. 460 * 461 * The lock is locked/unlocked using spin_lock()/spin_unlock() 462 * functions which must match the way they are locked/unlocked outside 463 * of this macro. 464 * 465 * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag 466 * set thus when other process waits process on the list if this 467 * process is awaken further processes are not considered. 468 * 469 * wake_up_locked() has to be called after changing any variable that could 470 * change the result of the wait condition. 471 * 472 * The function will return -ERESTARTSYS if it was interrupted by a 473 * signal and 0 if @condition evaluated to true. 474 */ 475#define wait_event_interruptible_exclusive_locked(wq, condition) \ 476 ((condition) \ 477 ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 0)) 478 479/** 480 * wait_event_interruptible_exclusive_locked_irq - sleep until a condition gets true 481 * @wq: the waitqueue to wait on 482 * @condition: a C expression for the event to wait for 483 * 484 * The process is put to sleep (TASK_INTERRUPTIBLE) until the 485 * @condition evaluates to true or a signal is received. 486 * The @condition is checked each time the waitqueue @wq is woken up. 487 * 488 * It must be called with wq.lock being held. This spinlock is 489 * unlocked while sleeping but @condition testing is done while lock 490 * is held and when this macro exits the lock is held. 491 * 492 * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq() 493 * functions which must match the way they are locked/unlocked outside 494 * of this macro. 495 * 496 * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag 497 * set thus when other process waits process on the list if this 498 * process is awaken further processes are not considered. 499 * 500 * wake_up_locked() has to be called after changing any variable that could 501 * change the result of the wait condition. 502 * 503 * The function will return -ERESTARTSYS if it was interrupted by a 504 * signal and 0 if @condition evaluated to true. 505 */ 506#define wait_event_interruptible_exclusive_locked_irq(wq, condition) \ 507 ((condition) \ 508 ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 1)) 509 510 511 512#define __wait_event_killable(wq, condition, ret) \ 513do { \ 514 DEFINE_WAIT(__wait); \ 515 \ 516 for (;;) { \ 517 prepare_to_wait(&wq, &__wait, TASK_KILLABLE); \ 518 if (condition) \ 519 break; \ 520 if (!fatal_signal_pending(current)) { \ 521 schedule(); \ 522 continue; \ 523 } \ 524 ret = -ERESTARTSYS; \ 525 break; \ 526 } \ 527 finish_wait(&wq, &__wait); \ 528} while (0) 529 530/** 531 * wait_event_killable - sleep until a condition gets true 532 * @wq: the waitqueue to wait on 533 * @condition: a C expression for the event to wait for 534 * 535 * The process is put to sleep (TASK_KILLABLE) until the 536 * @condition evaluates to true or a signal is received. 537 * The @condition is checked each time the waitqueue @wq is woken up. 538 * 539 * wake_up() has to be called after changing any variable that could 540 * change the result of the wait condition. 541 * 542 * The function will return -ERESTARTSYS if it was interrupted by a 543 * signal and 0 if @condition evaluated to true. 544 */ 545#define wait_event_killable(wq, condition) \ 546({ \ 547 int __ret = 0; \ 548 if (!(condition)) \ 549 __wait_event_killable(wq, condition, __ret); \ 550 __ret; \ 551}) 552 553/* 554 * These are the old interfaces to sleep waiting for an event. 555 * They are racy. DO NOT use them, use the wait_event* interfaces above. 556 * We plan to remove these interfaces. 557 */ 558extern void sleep_on(wait_queue_head_t *q); 559extern long sleep_on_timeout(wait_queue_head_t *q, 560 signed long timeout); 561extern void interruptible_sleep_on(wait_queue_head_t *q); 562extern long interruptible_sleep_on_timeout(wait_queue_head_t *q, 563 signed long timeout); 564 565/* 566 * Waitqueues which are removed from the waitqueue_head at wakeup time 567 */ 568void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state); 569void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state); 570void finish_wait(wait_queue_head_t *q, wait_queue_t *wait); 571void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, 572 unsigned int mode, void *key); 573int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); 574int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); 575 576#define DEFINE_WAIT_FUNC(name, function) \ 577 wait_queue_t name = { \ 578 .private = current, \ 579 .func = function, \ 580 .task_list = LIST_HEAD_INIT((name).task_list), \ 581 } 582 583#define DEFINE_WAIT(name) DEFINE_WAIT_FUNC(name, autoremove_wake_function) 584 585#define DEFINE_WAIT_BIT(name, word, bit) \ 586 struct wait_bit_queue name = { \ 587 .key = __WAIT_BIT_KEY_INITIALIZER(word, bit), \ 588 .wait = { \ 589 .private = current, \ 590 .func = wake_bit_function, \ 591 .task_list = \ 592 LIST_HEAD_INIT((name).wait.task_list), \ 593 }, \ 594 } 595 596#define init_wait(wait) \ 597 do { \ 598 (wait)->private = current; \ 599 (wait)->func = autoremove_wake_function; \ 600 INIT_LIST_HEAD(&(wait)->task_list); \ 601 (wait)->flags = 0; \ 602 } while (0) 603 604/** 605 * wait_on_bit - wait for a bit to be cleared 606 * @word: the word being waited on, a kernel virtual address 607 * @bit: the bit of the word being waited on 608 * @action: the function used to sleep, which may take special actions 609 * @mode: the task state to sleep in 610 * 611 * There is a standard hashed waitqueue table for generic use. This 612 * is the part of the hashtable's accessor API that waits on a bit. 613 * For instance, if one were to have waiters on a bitflag, one would 614 * call wait_on_bit() in threads waiting for the bit to clear. 615 * One uses wait_on_bit() where one is waiting for the bit to clear, 616 * but has no intention of setting it. 617 */ 618static inline int wait_on_bit(void *word, int bit, 619 int (*action)(void *), unsigned mode) 620{ 621 if (!test_bit(bit, word)) 622 return 0; 623 return out_of_line_wait_on_bit(word, bit, action, mode); 624} 625 626/** 627 * wait_on_bit_lock - wait for a bit to be cleared, when wanting to set it 628 * @word: the word being waited on, a kernel virtual address 629 * @bit: the bit of the word being waited on 630 * @action: the function used to sleep, which may take special actions 631 * @mode: the task state to sleep in 632 * 633 * There is a standard hashed waitqueue table for generic use. This 634 * is the part of the hashtable's accessor API that waits on a bit 635 * when one intends to set it, for instance, trying to lock bitflags. 636 * For instance, if one were to have waiters trying to set bitflag 637 * and waiting for it to clear before setting it, one would call 638 * wait_on_bit() in threads waiting to be able to set the bit. 639 * One uses wait_on_bit_lock() where one is waiting for the bit to 640 * clear with the intention of setting it, and when done, clearing it. 641 */ 642static inline int wait_on_bit_lock(void *word, int bit, 643 int (*action)(void *), unsigned mode) 644{ 645 if (!test_and_set_bit(bit, word)) 646 return 0; 647 return out_of_line_wait_on_bit_lock(word, bit, action, mode); 648} 649 650#endif