linux/include/linux/wait.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _LINUX_WAIT_H
   3#define _LINUX_WAIT_H
   4/*
   5 * Linux wait queue related types and methods
   6 */
   7#include <linux/list.h>
   8#include <linux/stddef.h>
   9#include <linux/spinlock.h>
  10
  11#include <asm/current.h>
  12#include <uapi/linux/wait.h>
  13
  14typedef struct wait_queue_entry wait_queue_entry_t;
  15
  16typedef int (*wait_queue_func_t)(struct wait_queue_entry *wq_entry, unsigned mode, int flags, void *key);
  17int default_wake_function(struct wait_queue_entry *wq_entry, unsigned mode, int flags, void *key);
  18
  19/* wait_queue_entry::flags */
  20#define WQ_FLAG_EXCLUSIVE       0x01
  21#define WQ_FLAG_WOKEN           0x02
  22#define WQ_FLAG_BOOKMARK        0x04
  23#define WQ_FLAG_CUSTOM          0x08
  24
  25/*
  26 * A single wait-queue entry structure:
  27 */
  28struct wait_queue_entry {
  29        unsigned int            flags;
  30        void                    *private;
  31        wait_queue_func_t       func;
  32        struct list_head        entry;
  33};
  34
  35struct wait_queue_head {
  36        spinlock_t              lock;
  37        struct list_head        head;
  38};
  39typedef struct wait_queue_head wait_queue_head_t;
  40
  41struct task_struct;
  42
  43/*
  44 * Macros for declaration and initialisaton of the datatypes
  45 */
  46
  47#define __WAITQUEUE_INITIALIZER(name, tsk) {                                    \
  48        .private        = tsk,                                                  \
  49        .func           = default_wake_function,                                \
  50        .entry          = { NULL, NULL } }
  51
  52#define DECLARE_WAITQUEUE(name, tsk)                                            \
  53        struct wait_queue_entry name = __WAITQUEUE_INITIALIZER(name, tsk)
  54
  55#define __WAIT_QUEUE_HEAD_INITIALIZER(name) {                                   \
  56        .lock           = __SPIN_LOCK_UNLOCKED(name.lock),                      \
  57        .head           = { &(name).head, &(name).head } }
  58
  59#define DECLARE_WAIT_QUEUE_HEAD(name) \
  60        struct wait_queue_head name = __WAIT_QUEUE_HEAD_INITIALIZER(name)
  61
  62extern void __init_waitqueue_head(struct wait_queue_head *wq_head, const char *name, struct lock_class_key *);
  63
  64#define init_waitqueue_head(wq_head)                                            \
  65        do {                                                                    \
  66                static struct lock_class_key __key;                             \
  67                                                                                \
  68                __init_waitqueue_head((wq_head), #wq_head, &__key);             \
  69        } while (0)
  70
  71#ifdef CONFIG_LOCKDEP
  72# define __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) \
  73        ({ init_waitqueue_head(&name); name; })
  74# define DECLARE_WAIT_QUEUE_HEAD_ONSTACK(name) \
  75        struct wait_queue_head name = __WAIT_QUEUE_HEAD_INIT_ONSTACK(name)
  76#else
  77# define DECLARE_WAIT_QUEUE_HEAD_ONSTACK(name) DECLARE_WAIT_QUEUE_HEAD(name)
  78#endif
  79
  80static inline void init_waitqueue_entry(struct wait_queue_entry *wq_entry, struct task_struct *p)
  81{
  82        wq_entry->flags         = 0;
  83        wq_entry->private       = p;
  84        wq_entry->func          = default_wake_function;
  85}
  86
  87static inline void
  88init_waitqueue_func_entry(struct wait_queue_entry *wq_entry, wait_queue_func_t func)
  89{
  90        wq_entry->flags         = 0;
  91        wq_entry->private       = NULL;
  92        wq_entry->func          = func;
  93}
  94
  95/**
  96 * waitqueue_active -- locklessly test for waiters on the queue
  97 * @wq_head: the waitqueue to test for waiters
  98 *
  99 * returns true if the wait list is not empty
 100 *
 101 * NOTE: this function is lockless and requires care, incorrect usage _will_
 102 * lead to sporadic and non-obvious failure.
 103 *
 104 * Use either while holding wait_queue_head::lock or when used for wakeups
 105 * with an extra smp_mb() like::
 106 *
 107 *      CPU0 - waker                    CPU1 - waiter
 108 *
 109 *                                      for (;;) {
 110 *      @cond = true;                     prepare_to_wait(&wq_head, &wait, state);
 111 *      smp_mb();                         // smp_mb() from set_current_state()
 112 *      if (waitqueue_active(wq_head))         if (@cond)
 113 *        wake_up(wq_head);                      break;
 114 *                                        schedule();
 115 *                                      }
 116 *                                      finish_wait(&wq_head, &wait);
 117 *
 118 * Because without the explicit smp_mb() it's possible for the
 119 * waitqueue_active() load to get hoisted over the @cond store such that we'll
 120 * observe an empty wait list while the waiter might not observe @cond.
 121 *
 122 * Also note that this 'optimization' trades a spin_lock() for an smp_mb(),
 123 * which (when the lock is uncontended) are of roughly equal cost.
 124 */
 125static inline int waitqueue_active(struct wait_queue_head *wq_head)
 126{
 127        return !list_empty(&wq_head->head);
 128}
 129
 130/**
 131 * wq_has_single_sleeper - check if there is only one sleeper
 132 * @wq_head: wait queue head
 133 *
 134 * Returns true of wq_head has only one sleeper on the list.
 135 *
 136 * Please refer to the comment for waitqueue_active.
 137 */
 138static inline bool wq_has_single_sleeper(struct wait_queue_head *wq_head)
 139{
 140        return list_is_singular(&wq_head->head);
 141}
 142
 143/**
 144 * wq_has_sleeper - check if there are any waiting processes
 145 * @wq_head: wait queue head
 146 *
 147 * Returns true if wq_head has waiting processes
 148 *
 149 * Please refer to the comment for waitqueue_active.
 150 */
 151static inline bool wq_has_sleeper(struct wait_queue_head *wq_head)
 152{
 153        /*
 154         * We need to be sure we are in sync with the
 155         * add_wait_queue modifications to the wait queue.
 156         *
 157         * This memory barrier should be paired with one on the
 158         * waiting side.
 159         */
 160        smp_mb();
 161        return waitqueue_active(wq_head);
 162}
 163
 164extern void add_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
 165extern void add_wait_queue_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
 166extern void remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
 167
 168static inline void __add_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
 169{
 170        list_add(&wq_entry->entry, &wq_head->head);
 171}
 172
 173/*
 174 * Used for wake-one threads:
 175 */
 176static inline void
 177__add_wait_queue_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
 178{
 179        wq_entry->flags |= WQ_FLAG_EXCLUSIVE;
 180        __add_wait_queue(wq_head, wq_entry);
 181}
 182
 183static inline void __add_wait_queue_entry_tail(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
 184{
 185        list_add_tail(&wq_entry->entry, &wq_head->head);
 186}
 187
 188static inline void
 189__add_wait_queue_entry_tail_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
 190{
 191        wq_entry->flags |= WQ_FLAG_EXCLUSIVE;
 192        __add_wait_queue_entry_tail(wq_head, wq_entry);
 193}
 194
 195static inline void
 196__remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
 197{
 198        list_del(&wq_entry->entry);
 199}
 200
 201void __wake_up(struct wait_queue_head *wq_head, unsigned int mode, int nr, void *key);
 202void __wake_up_locked_key(struct wait_queue_head *wq_head, unsigned int mode, void *key);
 203void __wake_up_locked_key_bookmark(struct wait_queue_head *wq_head,
 204                unsigned int mode, void *key, wait_queue_entry_t *bookmark);
 205void __wake_up_sync_key(struct wait_queue_head *wq_head, unsigned int mode, void *key);
 206void __wake_up_locked_sync_key(struct wait_queue_head *wq_head, unsigned int mode, void *key);
 207void __wake_up_locked(struct wait_queue_head *wq_head, unsigned int mode, int nr);
 208void __wake_up_sync(struct wait_queue_head *wq_head, unsigned int mode);
 209
 210#define wake_up(x)                      __wake_up(x, TASK_NORMAL, 1, NULL)
 211#define wake_up_nr(x, nr)               __wake_up(x, TASK_NORMAL, nr, NULL)
 212#define wake_up_all(x)                  __wake_up(x, TASK_NORMAL, 0, NULL)
 213#define wake_up_locked(x)               __wake_up_locked((x), TASK_NORMAL, 1)
 214#define wake_up_all_locked(x)           __wake_up_locked((x), TASK_NORMAL, 0)
 215
 216#define wake_up_interruptible(x)        __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)
 217#define wake_up_interruptible_nr(x, nr) __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL)
 218#define wake_up_interruptible_all(x)    __wake_up(x, TASK_INTERRUPTIBLE, 0, NULL)
 219#define wake_up_interruptible_sync(x)   __wake_up_sync((x), TASK_INTERRUPTIBLE)
 220
 221/*
 222 * Wakeup macros to be used to report events to the targets.
 223 */
 224#define poll_to_key(m) ((void *)(__force uintptr_t)(__poll_t)(m))
 225#define key_to_poll(m) ((__force __poll_t)(uintptr_t)(void *)(m))
 226#define wake_up_poll(x, m)                                                      \
 227        __wake_up(x, TASK_NORMAL, 1, poll_to_key(m))
 228#define wake_up_locked_poll(x, m)                                               \
 229        __wake_up_locked_key((x), TASK_NORMAL, poll_to_key(m))
 230#define wake_up_interruptible_poll(x, m)                                        \
 231        __wake_up(x, TASK_INTERRUPTIBLE, 1, poll_to_key(m))
 232#define wake_up_interruptible_sync_poll(x, m)                                   \
 233        __wake_up_sync_key((x), TASK_INTERRUPTIBLE, poll_to_key(m))
 234#define wake_up_interruptible_sync_poll_locked(x, m)                            \
 235        __wake_up_locked_sync_key((x), TASK_INTERRUPTIBLE, poll_to_key(m))
 236
 237#define ___wait_cond_timeout(condition)                                         \
 238({                                                                              \
 239        bool __cond = (condition);                                              \
 240        if (__cond && !__ret)                                                   \
 241                __ret = 1;                                                      \
 242        __cond || !__ret;                                                       \
 243})
 244
 245#define ___wait_is_interruptible(state)                                         \
 246        (!__builtin_constant_p(state) ||                                        \
 247                state == TASK_INTERRUPTIBLE || state == TASK_KILLABLE)          \
 248
 249extern void init_wait_entry(struct wait_queue_entry *wq_entry, int flags);
 250
 251/*
 252 * The below macro ___wait_event() has an explicit shadow of the __ret
 253 * variable when used from the wait_event_*() macros.
 254 *
 255 * This is so that both can use the ___wait_cond_timeout() construct
 256 * to wrap the condition.
 257 *
 258 * The type inconsistency of the wait_event_*() __ret variable is also
 259 * on purpose; we use long where we can return timeout values and int
 260 * otherwise.
 261 */
 262
 263#define ___wait_event(wq_head, condition, state, exclusive, ret, cmd)           \
 264({                                                                              \
 265        __label__ __out;                                                        \
 266        struct wait_queue_entry __wq_entry;                                     \
 267        long __ret = ret;       /* explicit shadow */                           \
 268                                                                                \
 269        init_wait_entry(&__wq_entry, exclusive ? WQ_FLAG_EXCLUSIVE : 0);        \
 270        for (;;) {                                                              \
 271                long __int = prepare_to_wait_event(&wq_head, &__wq_entry, state);\
 272                                                                                \
 273                if (condition)                                                  \
 274                        break;                                                  \
 275                                                                                \
 276                if (___wait_is_interruptible(state) && __int) {                 \
 277                        __ret = __int;                                          \
 278                        goto __out;                                             \
 279                }                                                               \
 280                                                                                \
 281                cmd;                                                            \
 282        }                                                                       \
 283        finish_wait(&wq_head, &__wq_entry);                                     \
 284__out:  __ret;                                                                  \
 285})
 286
 287#define __wait_event(wq_head, condition)                                        \
 288        (void)___wait_event(wq_head, condition, TASK_UNINTERRUPTIBLE, 0, 0,     \
 289                            schedule())
 290
 291/**
 292 * wait_event - sleep until a condition gets true
 293 * @wq_head: the waitqueue to wait on
 294 * @condition: a C expression for the event to wait for
 295 *
 296 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the
 297 * @condition evaluates to true. The @condition is checked each time
 298 * the waitqueue @wq_head is woken up.
 299 *
 300 * wake_up() has to be called after changing any variable that could
 301 * change the result of the wait condition.
 302 */
 303#define wait_event(wq_head, condition)                                          \
 304do {                                                                            \
 305        might_sleep();                                                          \
 306        if (condition)                                                          \
 307                break;                                                          \
 308        __wait_event(wq_head, condition);                                       \
 309} while (0)
 310
 311#define __io_wait_event(wq_head, condition)                                     \
 312        (void)___wait_event(wq_head, condition, TASK_UNINTERRUPTIBLE, 0, 0,     \
 313                            io_schedule())
 314
 315/*
 316 * io_wait_event() -- like wait_event() but with io_schedule()
 317 */
 318#define io_wait_event(wq_head, condition)                                       \
 319do {                                                                            \
 320        might_sleep();                                                          \
 321        if (condition)                                                          \
 322                break;                                                          \
 323        __io_wait_event(wq_head, condition);                                    \
 324} while (0)
 325
 326#define __wait_event_freezable(wq_head, condition)                              \
 327        ___wait_event(wq_head, condition, TASK_INTERRUPTIBLE, 0, 0,             \
 328                            freezable_schedule())
 329
 330/**
 331 * wait_event_freezable - sleep (or freeze) until a condition gets true
 332 * @wq_head: the waitqueue to wait on
 333 * @condition: a C expression for the event to wait for
 334 *
 335 * The process is put to sleep (TASK_INTERRUPTIBLE -- so as not to contribute
 336 * to system load) until the @condition evaluates to true. The
 337 * @condition is checked each time the waitqueue @wq_head is woken up.
 338 *
 339 * wake_up() has to be called after changing any variable that could
 340 * change the result of the wait condition.
 341 */
 342#define wait_event_freezable(wq_head, condition)                                \
 343({                                                                              \
 344        int __ret = 0;                                                          \
 345        might_sleep();                                                          \
 346        if (!(condition))                                                       \
 347                __ret = __wait_event_freezable(wq_head, condition);             \
 348        __ret;                                                                  \
 349})
 350
 351#define __wait_event_timeout(wq_head, condition, timeout)                       \
 352        ___wait_event(wq_head, ___wait_cond_timeout(condition),                 \
 353                      TASK_UNINTERRUPTIBLE, 0, timeout,                         \
 354                      __ret = schedule_timeout(__ret))
 355
 356/**
 357 * wait_event_timeout - sleep until a condition gets true or a timeout elapses
 358 * @wq_head: the waitqueue to wait on
 359 * @condition: a C expression for the event to wait for
 360 * @timeout: timeout, in jiffies
 361 *
 362 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the
 363 * @condition evaluates to true. The @condition is checked each time
 364 * the waitqueue @wq_head is woken up.
 365 *
 366 * wake_up() has to be called after changing any variable that could
 367 * change the result of the wait condition.
 368 *
 369 * Returns:
 370 * 0 if the @condition evaluated to %false after the @timeout elapsed,
 371 * 1 if the @condition evaluated to %true after the @timeout elapsed,
 372 * or the remaining jiffies (at least 1) if the @condition evaluated
 373 * to %true before the @timeout elapsed.
 374 */
 375#define wait_event_timeout(wq_head, condition, timeout)                         \
 376({                                                                              \
 377        long __ret = timeout;                                                   \
 378        might_sleep();                                                          \
 379        if (!___wait_cond_timeout(condition))                                   \
 380                __ret = __wait_event_timeout(wq_head, condition, timeout);      \
 381        __ret;                                                                  \
 382})
 383
 384#define __wait_event_freezable_timeout(wq_head, condition, timeout)             \
 385        ___wait_event(wq_head, ___wait_cond_timeout(condition),                 \
 386                      TASK_INTERRUPTIBLE, 0, timeout,                           \
 387                      __ret = freezable_schedule_timeout(__ret))
 388
 389/*
 390 * like wait_event_timeout() -- except it uses TASK_INTERRUPTIBLE to avoid
 391 * increasing load and is freezable.
 392 */
 393#define wait_event_freezable_timeout(wq_head, condition, timeout)               \
 394({                                                                              \
 395        long __ret = timeout;                                                   \
 396        might_sleep();                                                          \
 397        if (!___wait_cond_timeout(condition))                                   \
 398                __ret = __wait_event_freezable_timeout(wq_head, condition, timeout); \
 399        __ret;                                                                  \
 400})
 401
 402#define __wait_event_exclusive_cmd(wq_head, condition, cmd1, cmd2)              \
 403        (void)___wait_event(wq_head, condition, TASK_UNINTERRUPTIBLE, 1, 0,     \
 404                            cmd1; schedule(); cmd2)
 405/*
 406 * Just like wait_event_cmd(), except it sets exclusive flag
 407 */
 408#define wait_event_exclusive_cmd(wq_head, condition, cmd1, cmd2)                \
 409do {                                                                            \
 410        if (condition)                                                          \
 411                break;                                                          \
 412        __wait_event_exclusive_cmd(wq_head, condition, cmd1, cmd2);             \
 413} while (0)
 414
 415#define __wait_event_cmd(wq_head, condition, cmd1, cmd2)                        \
 416        (void)___wait_event(wq_head, condition, TASK_UNINTERRUPTIBLE, 0, 0,     \
 417                            cmd1; schedule(); cmd2)
 418
 419/**
 420 * wait_event_cmd - sleep until a condition gets true
 421 * @wq_head: the waitqueue to wait on
 422 * @condition: a C expression for the event to wait for
 423 * @cmd1: the command will be executed before sleep
 424 * @cmd2: the command will be executed after sleep
 425 *
 426 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the
 427 * @condition evaluates to true. The @condition is checked each time
 428 * the waitqueue @wq_head is woken up.
 429 *
 430 * wake_up() has to be called after changing any variable that could
 431 * change the result of the wait condition.
 432 */
 433#define wait_event_cmd(wq_head, condition, cmd1, cmd2)                          \
 434do {                                                                            \
 435        if (condition)                                                          \
 436                break;                                                          \
 437        __wait_event_cmd(wq_head, condition, cmd1, cmd2);                       \
 438} while (0)
 439
 440#define __wait_event_interruptible(wq_head, condition)                          \
 441        ___wait_event(wq_head, condition, TASK_INTERRUPTIBLE, 0, 0,             \
 442                      schedule())
 443
 444/**
 445 * wait_event_interruptible - sleep until a condition gets true
 446 * @wq_head: the waitqueue to wait on
 447 * @condition: a C expression for the event to wait for
 448 *
 449 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
 450 * @condition evaluates to true or a signal is received.
 451 * The @condition is checked each time the waitqueue @wq_head is woken up.
 452 *
 453 * wake_up() has to be called after changing any variable that could
 454 * change the result of the wait condition.
 455 *
 456 * The function will return -ERESTARTSYS if it was interrupted by a
 457 * signal and 0 if @condition evaluated to true.
 458 */
 459#define wait_event_interruptible(wq_head, condition)                            \
 460({                                                                              \
 461        int __ret = 0;                                                          \
 462        might_sleep();                                                          \
 463        if (!(condition))                                                       \
 464                __ret = __wait_event_interruptible(wq_head, condition);         \
 465        __ret;                                                                  \
 466})
 467
 468#define __wait_event_interruptible_timeout(wq_head, condition, timeout)         \
 469        ___wait_event(wq_head, ___wait_cond_timeout(condition),                 \
 470                      TASK_INTERRUPTIBLE, 0, timeout,                           \
 471                      __ret = schedule_timeout(__ret))
 472
 473/**
 474 * wait_event_interruptible_timeout - sleep until a condition gets true or a timeout elapses
 475 * @wq_head: the waitqueue to wait on
 476 * @condition: a C expression for the event to wait for
 477 * @timeout: timeout, in jiffies
 478 *
 479 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
 480 * @condition evaluates to true or a signal is received.
 481 * The @condition is checked each time the waitqueue @wq_head is woken up.
 482 *
 483 * wake_up() has to be called after changing any variable that could
 484 * change the result of the wait condition.
 485 *
 486 * Returns:
 487 * 0 if the @condition evaluated to %false after the @timeout elapsed,
 488 * 1 if the @condition evaluated to %true after the @timeout elapsed,
 489 * the remaining jiffies (at least 1) if the @condition evaluated
 490 * to %true before the @timeout elapsed, or -%ERESTARTSYS if it was
 491 * interrupted by a signal.
 492 */
 493#define wait_event_interruptible_timeout(wq_head, condition, timeout)           \
 494({                                                                              \
 495        long __ret = timeout;                                                   \
 496        might_sleep();                                                          \
 497        if (!___wait_cond_timeout(condition))                                   \
 498                __ret = __wait_event_interruptible_timeout(wq_head,             \
 499                                                condition, timeout);            \
 500        __ret;                                                                  \
 501})
 502
 503#define __wait_event_hrtimeout(wq_head, condition, timeout, state)              \
 504({                                                                              \
 505        int __ret = 0;                                                          \
 506        struct hrtimer_sleeper __t;                                             \
 507                                                                                \
 508        hrtimer_init_sleeper_on_stack(&__t, CLOCK_MONOTONIC,                    \
 509                                      HRTIMER_MODE_REL);                        \
 510        if ((timeout) != KTIME_MAX)                                             \
 511                hrtimer_start_range_ns(&__t.timer, timeout,                     \
 512                                       current->timer_slack_ns,                 \
 513                                       HRTIMER_MODE_REL);                       \
 514                                                                                \
 515        __ret = ___wait_event(wq_head, condition, state, 0, 0,                  \
 516                if (!__t.task) {                                                \
 517                        __ret = -ETIME;                                         \
 518                        break;                                                  \
 519                }                                                               \
 520                schedule());                                                    \
 521                                                                                \
 522        hrtimer_cancel(&__t.timer);                                             \
 523        destroy_hrtimer_on_stack(&__t.timer);                                   \
 524        __ret;                                                                  \
 525})
 526
 527/**
 528 * wait_event_hrtimeout - sleep until a condition gets true or a timeout elapses
 529 * @wq_head: the waitqueue to wait on
 530 * @condition: a C expression for the event to wait for
 531 * @timeout: timeout, as a ktime_t
 532 *
 533 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the
 534 * @condition evaluates to true or a signal is received.
 535 * The @condition is checked each time the waitqueue @wq_head is woken up.
 536 *
 537 * wake_up() has to be called after changing any variable that could
 538 * change the result of the wait condition.
 539 *
 540 * The function returns 0 if @condition became true, or -ETIME if the timeout
 541 * elapsed.
 542 */
 543#define wait_event_hrtimeout(wq_head, condition, timeout)                       \
 544({                                                                              \
 545        int __ret = 0;                                                          \
 546        might_sleep();                                                          \
 547        if (!(condition))                                                       \
 548                __ret = __wait_event_hrtimeout(wq_head, condition, timeout,     \
 549                                               TASK_UNINTERRUPTIBLE);           \
 550        __ret;                                                                  \
 551})
 552
 553/**
 554 * wait_event_interruptible_hrtimeout - sleep until a condition gets true or a timeout elapses
 555 * @wq: the waitqueue to wait on
 556 * @condition: a C expression for the event to wait for
 557 * @timeout: timeout, as a ktime_t
 558 *
 559 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
 560 * @condition evaluates to true or a signal is received.
 561 * The @condition is checked each time the waitqueue @wq is woken up.
 562 *
 563 * wake_up() has to be called after changing any variable that could
 564 * change the result of the wait condition.
 565 *
 566 * The function returns 0 if @condition became true, -ERESTARTSYS if it was
 567 * interrupted by a signal, or -ETIME if the timeout elapsed.
 568 */
 569#define wait_event_interruptible_hrtimeout(wq, condition, timeout)              \
 570({                                                                              \
 571        long __ret = 0;                                                         \
 572        might_sleep();                                                          \
 573        if (!(condition))                                                       \
 574                __ret = __wait_event_hrtimeout(wq, condition, timeout,          \
 575                                               TASK_INTERRUPTIBLE);             \
 576        __ret;                                                                  \
 577})
 578
 579#define __wait_event_interruptible_exclusive(wq, condition)                     \
 580        ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 1, 0,                  \
 581                      schedule())
 582
 583#define wait_event_interruptible_exclusive(wq, condition)                       \
 584({                                                                              \
 585        int __ret = 0;                                                          \
 586        might_sleep();                                                          \
 587        if (!(condition))                                                       \
 588                __ret = __wait_event_interruptible_exclusive(wq, condition);    \
 589        __ret;                                                                  \
 590})
 591
 592#define __wait_event_killable_exclusive(wq, condition)                          \
 593        ___wait_event(wq, condition, TASK_KILLABLE, 1, 0,                       \
 594                      schedule())
 595
 596#define wait_event_killable_exclusive(wq, condition)                            \
 597({                                                                              \
 598        int __ret = 0;                                                          \
 599        might_sleep();                                                          \
 600        if (!(condition))                                                       \
 601                __ret = __wait_event_killable_exclusive(wq, condition);         \
 602        __ret;                                                                  \
 603})
 604
 605
 606#define __wait_event_freezable_exclusive(wq, condition)                         \
 607        ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 1, 0,                  \
 608                        freezable_schedule())
 609
 610#define wait_event_freezable_exclusive(wq, condition)                           \
 611({                                                                              \
 612        int __ret = 0;                                                          \
 613        might_sleep();                                                          \
 614        if (!(condition))                                                       \
 615                __ret = __wait_event_freezable_exclusive(wq, condition);        \
 616        __ret;                                                                  \
 617})
 618
 619/**
 620 * wait_event_idle - wait for a condition without contributing to system load
 621 * @wq_head: the waitqueue to wait on
 622 * @condition: a C expression for the event to wait for
 623 *
 624 * The process is put to sleep (TASK_IDLE) until the
 625 * @condition evaluates to true.
 626 * The @condition is checked each time the waitqueue @wq_head is woken up.
 627 *
 628 * wake_up() has to be called after changing any variable that could
 629 * change the result of the wait condition.
 630 *
 631 */
 632#define wait_event_idle(wq_head, condition)                                     \
 633do {                                                                            \
 634        might_sleep();                                                          \
 635        if (!(condition))                                                       \
 636                ___wait_event(wq_head, condition, TASK_IDLE, 0, 0, schedule()); \
 637} while (0)
 638
 639/**
 640 * wait_event_idle_exclusive - wait for a condition with contributing to system load
 641 * @wq_head: the waitqueue to wait on
 642 * @condition: a C expression for the event to wait for
 643 *
 644 * The process is put to sleep (TASK_IDLE) until the
 645 * @condition evaluates to true.
 646 * The @condition is checked each time the waitqueue @wq_head is woken up.
 647 *
 648 * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag
 649 * set thus if other processes wait on the same list, when this
 650 * process is woken further processes are not considered.
 651 *
 652 * wake_up() has to be called after changing any variable that could
 653 * change the result of the wait condition.
 654 *
 655 */
 656#define wait_event_idle_exclusive(wq_head, condition)                           \
 657do {                                                                            \
 658        might_sleep();                                                          \
 659        if (!(condition))                                                       \
 660                ___wait_event(wq_head, condition, TASK_IDLE, 1, 0, schedule()); \
 661} while (0)
 662
 663#define __wait_event_idle_timeout(wq_head, condition, timeout)                  \
 664        ___wait_event(wq_head, ___wait_cond_timeout(condition),                 \
 665                      TASK_IDLE, 0, timeout,                                    \
 666                      __ret = schedule_timeout(__ret))
 667
 668/**
 669 * wait_event_idle_timeout - sleep without load until a condition becomes true or a timeout elapses
 670 * @wq_head: the waitqueue to wait on
 671 * @condition: a C expression for the event to wait for
 672 * @timeout: timeout, in jiffies
 673 *
 674 * The process is put to sleep (TASK_IDLE) until the
 675 * @condition evaluates to true. The @condition is checked each time
 676 * the waitqueue @wq_head is woken up.
 677 *
 678 * wake_up() has to be called after changing any variable that could
 679 * change the result of the wait condition.
 680 *
 681 * Returns:
 682 * 0 if the @condition evaluated to %false after the @timeout elapsed,
 683 * 1 if the @condition evaluated to %true after the @timeout elapsed,
 684 * or the remaining jiffies (at least 1) if the @condition evaluated
 685 * to %true before the @timeout elapsed.
 686 */
 687#define wait_event_idle_timeout(wq_head, condition, timeout)                    \
 688({                                                                              \
 689        long __ret = timeout;                                                   \
 690        might_sleep();                                                          \
 691        if (!___wait_cond_timeout(condition))                                   \
 692                __ret = __wait_event_idle_timeout(wq_head, condition, timeout); \
 693        __ret;                                                                  \
 694})
 695
 696#define __wait_event_idle_exclusive_timeout(wq_head, condition, timeout)        \
 697        ___wait_event(wq_head, ___wait_cond_timeout(condition),                 \
 698                      TASK_IDLE, 1, timeout,                                    \
 699                      __ret = schedule_timeout(__ret))
 700
 701/**
 702 * wait_event_idle_exclusive_timeout - sleep without load until a condition becomes true or a timeout elapses
 703 * @wq_head: the waitqueue to wait on
 704 * @condition: a C expression for the event to wait for
 705 * @timeout: timeout, in jiffies
 706 *
 707 * The process is put to sleep (TASK_IDLE) until the
 708 * @condition evaluates to true. The @condition is checked each time
 709 * the waitqueue @wq_head is woken up.
 710 *
 711 * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag
 712 * set thus if other processes wait on the same list, when this
 713 * process is woken further processes are not considered.
 714 *
 715 * wake_up() has to be called after changing any variable that could
 716 * change the result of the wait condition.
 717 *
 718 * Returns:
 719 * 0 if the @condition evaluated to %false after the @timeout elapsed,
 720 * 1 if the @condition evaluated to %true after the @timeout elapsed,
 721 * or the remaining jiffies (at least 1) if the @condition evaluated
 722 * to %true before the @timeout elapsed.
 723 */
 724#define wait_event_idle_exclusive_timeout(wq_head, condition, timeout)          \
 725({                                                                              \
 726        long __ret = timeout;                                                   \
 727        might_sleep();                                                          \
 728        if (!___wait_cond_timeout(condition))                                   \
 729                __ret = __wait_event_idle_exclusive_timeout(wq_head, condition, timeout);\
 730        __ret;                                                                  \
 731})
 732
 733extern int do_wait_intr(wait_queue_head_t *, wait_queue_entry_t *);
 734extern int do_wait_intr_irq(wait_queue_head_t *, wait_queue_entry_t *);
 735
 736#define __wait_event_interruptible_locked(wq, condition, exclusive, fn)         \
 737({                                                                              \
 738        int __ret;                                                              \
 739        DEFINE_WAIT(__wait);                                                    \
 740        if (exclusive)                                                          \
 741                __wait.flags |= WQ_FLAG_EXCLUSIVE;                              \
 742        do {                                                                    \
 743                __ret = fn(&(wq), &__wait);                                     \
 744                if (__ret)                                                      \
 745                        break;                                                  \
 746        } while (!(condition));                                                 \
 747        __remove_wait_queue(&(wq), &__wait);                                    \
 748        __set_current_state(TASK_RUNNING);                                      \
 749        __ret;                                                                  \
 750})
 751
 752
 753/**
 754 * wait_event_interruptible_locked - sleep until a condition gets true
 755 * @wq: the waitqueue to wait on
 756 * @condition: a C expression for the event to wait for
 757 *
 758 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
 759 * @condition evaluates to true or a signal is received.
 760 * The @condition is checked each time the waitqueue @wq is woken up.
 761 *
 762 * It must be called with wq.lock being held.  This spinlock is
 763 * unlocked while sleeping but @condition testing is done while lock
 764 * is held and when this macro exits the lock is held.
 765 *
 766 * The lock is locked/unlocked using spin_lock()/spin_unlock()
 767 * functions which must match the way they are locked/unlocked outside
 768 * of this macro.
 769 *
 770 * wake_up_locked() has to be called after changing any variable that could
 771 * change the result of the wait condition.
 772 *
 773 * The function will return -ERESTARTSYS if it was interrupted by a
 774 * signal and 0 if @condition evaluated to true.
 775 */
 776#define wait_event_interruptible_locked(wq, condition)                          \
 777        ((condition)                                                            \
 778         ? 0 : __wait_event_interruptible_locked(wq, condition, 0, do_wait_intr))
 779
 780/**
 781 * wait_event_interruptible_locked_irq - sleep until a condition gets true
 782 * @wq: the waitqueue to wait on
 783 * @condition: a C expression for the event to wait for
 784 *
 785 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
 786 * @condition evaluates to true or a signal is received.
 787 * The @condition is checked each time the waitqueue @wq is woken up.
 788 *
 789 * It must be called with wq.lock being held.  This spinlock is
 790 * unlocked while sleeping but @condition testing is done while lock
 791 * is held and when this macro exits the lock is held.
 792 *
 793 * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq()
 794 * functions which must match the way they are locked/unlocked outside
 795 * of this macro.
 796 *
 797 * wake_up_locked() has to be called after changing any variable that could
 798 * change the result of the wait condition.
 799 *
 800 * The function will return -ERESTARTSYS if it was interrupted by a
 801 * signal and 0 if @condition evaluated to true.
 802 */
 803#define wait_event_interruptible_locked_irq(wq, condition)                      \
 804        ((condition)                                                            \
 805         ? 0 : __wait_event_interruptible_locked(wq, condition, 0, do_wait_intr_irq))
 806
 807/**
 808 * wait_event_interruptible_exclusive_locked - sleep exclusively until a condition gets true
 809 * @wq: the waitqueue to wait on
 810 * @condition: a C expression for the event to wait for
 811 *
 812 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
 813 * @condition evaluates to true or a signal is received.
 814 * The @condition is checked each time the waitqueue @wq is woken up.
 815 *
 816 * It must be called with wq.lock being held.  This spinlock is
 817 * unlocked while sleeping but @condition testing is done while lock
 818 * is held and when this macro exits the lock is held.
 819 *
 820 * The lock is locked/unlocked using spin_lock()/spin_unlock()
 821 * functions which must match the way they are locked/unlocked outside
 822 * of this macro.
 823 *
 824 * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag
 825 * set thus when other process waits process on the list if this
 826 * process is awaken further processes are not considered.
 827 *
 828 * wake_up_locked() has to be called after changing any variable that could
 829 * change the result of the wait condition.
 830 *
 831 * The function will return -ERESTARTSYS if it was interrupted by a
 832 * signal and 0 if @condition evaluated to true.
 833 */
 834#define wait_event_interruptible_exclusive_locked(wq, condition)                \
 835        ((condition)                                                            \
 836         ? 0 : __wait_event_interruptible_locked(wq, condition, 1, do_wait_intr))
 837
 838/**
 839 * wait_event_interruptible_exclusive_locked_irq - sleep until a condition gets true
 840 * @wq: the waitqueue to wait on
 841 * @condition: a C expression for the event to wait for
 842 *
 843 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
 844 * @condition evaluates to true or a signal is received.
 845 * The @condition is checked each time the waitqueue @wq is woken up.
 846 *
 847 * It must be called with wq.lock being held.  This spinlock is
 848 * unlocked while sleeping but @condition testing is done while lock
 849 * is held and when this macro exits the lock is held.
 850 *
 851 * The lock is locked/unlocked using spin_lock_irq()/spin_unlock_irq()
 852 * functions which must match the way they are locked/unlocked outside
 853 * of this macro.
 854 *
 855 * The process is put on the wait queue with an WQ_FLAG_EXCLUSIVE flag
 856 * set thus when other process waits process on the list if this
 857 * process is awaken further processes are not considered.
 858 *
 859 * wake_up_locked() has to be called after changing any variable that could
 860 * change the result of the wait condition.
 861 *
 862 * The function will return -ERESTARTSYS if it was interrupted by a
 863 * signal and 0 if @condition evaluated to true.
 864 */
 865#define wait_event_interruptible_exclusive_locked_irq(wq, condition)            \
 866        ((condition)                                                            \
 867         ? 0 : __wait_event_interruptible_locked(wq, condition, 1, do_wait_intr_irq))
 868
 869
 870#define __wait_event_killable(wq, condition)                                    \
 871        ___wait_event(wq, condition, TASK_KILLABLE, 0, 0, schedule())
 872
 873/**
 874 * wait_event_killable - sleep until a condition gets true
 875 * @wq_head: the waitqueue to wait on
 876 * @condition: a C expression for the event to wait for
 877 *
 878 * The process is put to sleep (TASK_KILLABLE) until the
 879 * @condition evaluates to true or a signal is received.
 880 * The @condition is checked each time the waitqueue @wq_head is woken up.
 881 *
 882 * wake_up() has to be called after changing any variable that could
 883 * change the result of the wait condition.
 884 *
 885 * The function will return -ERESTARTSYS if it was interrupted by a
 886 * signal and 0 if @condition evaluated to true.
 887 */
 888#define wait_event_killable(wq_head, condition)                                 \
 889({                                                                              \
 890        int __ret = 0;                                                          \
 891        might_sleep();                                                          \
 892        if (!(condition))                                                       \
 893                __ret = __wait_event_killable(wq_head, condition);              \
 894        __ret;                                                                  \
 895})
 896
 897#define __wait_event_killable_timeout(wq_head, condition, timeout)              \
 898        ___wait_event(wq_head, ___wait_cond_timeout(condition),                 \
 899                      TASK_KILLABLE, 0, timeout,                                \
 900                      __ret = schedule_timeout(__ret))
 901
 902/**
 903 * wait_event_killable_timeout - sleep until a condition gets true or a timeout elapses
 904 * @wq_head: the waitqueue to wait on
 905 * @condition: a C expression for the event to wait for
 906 * @timeout: timeout, in jiffies
 907 *
 908 * The process is put to sleep (TASK_KILLABLE) until the
 909 * @condition evaluates to true or a kill signal is received.
 910 * The @condition is checked each time the waitqueue @wq_head is woken up.
 911 *
 912 * wake_up() has to be called after changing any variable that could
 913 * change the result of the wait condition.
 914 *
 915 * Returns:
 916 * 0 if the @condition evaluated to %false after the @timeout elapsed,
 917 * 1 if the @condition evaluated to %true after the @timeout elapsed,
 918 * the remaining jiffies (at least 1) if the @condition evaluated
 919 * to %true before the @timeout elapsed, or -%ERESTARTSYS if it was
 920 * interrupted by a kill signal.
 921 *
 922 * Only kill signals interrupt this process.
 923 */
 924#define wait_event_killable_timeout(wq_head, condition, timeout)                \
 925({                                                                              \
 926        long __ret = timeout;                                                   \
 927        might_sleep();                                                          \
 928        if (!___wait_cond_timeout(condition))                                   \
 929                __ret = __wait_event_killable_timeout(wq_head,                  \
 930                                                condition, timeout);            \
 931        __ret;                                                                  \
 932})
 933
 934
 935#define __wait_event_lock_irq(wq_head, condition, lock, cmd)                    \
 936        (void)___wait_event(wq_head, condition, TASK_UNINTERRUPTIBLE, 0, 0,     \
 937                            spin_unlock_irq(&lock);                             \
 938                            cmd;                                                \
 939                            schedule();                                         \
 940                            spin_lock_irq(&lock))
 941
 942/**
 943 * wait_event_lock_irq_cmd - sleep until a condition gets true. The
 944 *                           condition is checked under the lock. This
 945 *                           is expected to be called with the lock
 946 *                           taken.
 947 * @wq_head: the waitqueue to wait on
 948 * @condition: a C expression for the event to wait for
 949 * @lock: a locked spinlock_t, which will be released before cmd
 950 *        and schedule() and reacquired afterwards.
 951 * @cmd: a command which is invoked outside the critical section before
 952 *       sleep
 953 *
 954 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the
 955 * @condition evaluates to true. The @condition is checked each time
 956 * the waitqueue @wq_head is woken up.
 957 *
 958 * wake_up() has to be called after changing any variable that could
 959 * change the result of the wait condition.
 960 *
 961 * This is supposed to be called while holding the lock. The lock is
 962 * dropped before invoking the cmd and going to sleep and is reacquired
 963 * afterwards.
 964 */
 965#define wait_event_lock_irq_cmd(wq_head, condition, lock, cmd)                  \
 966do {                                                                            \
 967        if (condition)                                                          \
 968                break;                                                          \
 969        __wait_event_lock_irq(wq_head, condition, lock, cmd);                   \
 970} while (0)
 971
 972/**
 973 * wait_event_lock_irq - sleep until a condition gets true. The
 974 *                       condition is checked under the lock. This
 975 *                       is expected to be called with the lock
 976 *                       taken.
 977 * @wq_head: the waitqueue to wait on
 978 * @condition: a C expression for the event to wait for
 979 * @lock: a locked spinlock_t, which will be released before schedule()
 980 *        and reacquired afterwards.
 981 *
 982 * The process is put to sleep (TASK_UNINTERRUPTIBLE) until the
 983 * @condition evaluates to true. The @condition is checked each time
 984 * the waitqueue @wq_head is woken up.
 985 *
 986 * wake_up() has to be called after changing any variable that could
 987 * change the result of the wait condition.
 988 *
 989 * This is supposed to be called while holding the lock. The lock is
 990 * dropped before going to sleep and is reacquired afterwards.
 991 */
 992#define wait_event_lock_irq(wq_head, condition, lock)                           \
 993do {                                                                            \
 994        if (condition)                                                          \
 995                break;                                                          \
 996        __wait_event_lock_irq(wq_head, condition, lock, );                      \
 997} while (0)
 998
 999
1000#define __wait_event_interruptible_lock_irq(wq_head, condition, lock, cmd)      \
1001        ___wait_event(wq_head, condition, TASK_INTERRUPTIBLE, 0, 0,             \
1002                      spin_unlock_irq(&lock);                                   \
1003                      cmd;                                                      \
1004                      schedule();                                               \
1005                      spin_lock_irq(&lock))
1006
1007/**
1008 * wait_event_interruptible_lock_irq_cmd - sleep until a condition gets true.
1009 *              The condition is checked under the lock. This is expected to
1010 *              be called with the lock taken.
1011 * @wq_head: the waitqueue to wait on
1012 * @condition: a C expression for the event to wait for
1013 * @lock: a locked spinlock_t, which will be released before cmd and
1014 *        schedule() and reacquired afterwards.
1015 * @cmd: a command which is invoked outside the critical section before
1016 *       sleep
1017 *
1018 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
1019 * @condition evaluates to true or a signal is received. The @condition is
1020 * checked each time the waitqueue @wq_head is woken up.
1021 *
1022 * wake_up() has to be called after changing any variable that could
1023 * change the result of the wait condition.
1024 *
1025 * This is supposed to be called while holding the lock. The lock is
1026 * dropped before invoking the cmd and going to sleep and is reacquired
1027 * afterwards.
1028 *
1029 * The macro will return -ERESTARTSYS if it was interrupted by a signal
1030 * and 0 if @condition evaluated to true.
1031 */
1032#define wait_event_interruptible_lock_irq_cmd(wq_head, condition, lock, cmd)    \
1033({                                                                              \
1034        int __ret = 0;                                                          \
1035        if (!(condition))                                                       \
1036                __ret = __wait_event_interruptible_lock_irq(wq_head,            \
1037                                                condition, lock, cmd);          \
1038        __ret;                                                                  \
1039})
1040
1041/**
1042 * wait_event_interruptible_lock_irq - sleep until a condition gets true.
1043 *              The condition is checked under the lock. This is expected
1044 *              to be called with the lock taken.
1045 * @wq_head: the waitqueue to wait on
1046 * @condition: a C expression for the event to wait for
1047 * @lock: a locked spinlock_t, which will be released before schedule()
1048 *        and reacquired afterwards.
1049 *
1050 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
1051 * @condition evaluates to true or signal is received. The @condition is
1052 * checked each time the waitqueue @wq_head is woken up.
1053 *
1054 * wake_up() has to be called after changing any variable that could
1055 * change the result of the wait condition.
1056 *
1057 * This is supposed to be called while holding the lock. The lock is
1058 * dropped before going to sleep and is reacquired afterwards.
1059 *
1060 * The macro will return -ERESTARTSYS if it was interrupted by a signal
1061 * and 0 if @condition evaluated to true.
1062 */
1063#define wait_event_interruptible_lock_irq(wq_head, condition, lock)             \
1064({                                                                              \
1065        int __ret = 0;                                                          \
1066        if (!(condition))                                                       \
1067                __ret = __wait_event_interruptible_lock_irq(wq_head,            \
1068                                                condition, lock,);              \
1069        __ret;                                                                  \
1070})
1071
1072#define __wait_event_lock_irq_timeout(wq_head, condition, lock, timeout, state) \
1073        ___wait_event(wq_head, ___wait_cond_timeout(condition),                 \
1074                      state, 0, timeout,                                        \
1075                      spin_unlock_irq(&lock);                                   \
1076                      __ret = schedule_timeout(__ret);                          \
1077                      spin_lock_irq(&lock));
1078
1079/**
1080 * wait_event_interruptible_lock_irq_timeout - sleep until a condition gets
1081 *              true or a timeout elapses. The condition is checked under
1082 *              the lock. This is expected to be called with the lock taken.
1083 * @wq_head: the waitqueue to wait on
1084 * @condition: a C expression for the event to wait for
1085 * @lock: a locked spinlock_t, which will be released before schedule()
1086 *        and reacquired afterwards.
1087 * @timeout: timeout, in jiffies
1088 *
1089 * The process is put to sleep (TASK_INTERRUPTIBLE) until the
1090 * @condition evaluates to true or signal is received. The @condition is
1091 * checked each time the waitqueue @wq_head is woken up.
1092 *
1093 * wake_up() has to be called after changing any variable that could
1094 * change the result of the wait condition.
1095 *
1096 * This is supposed to be called while holding the lock. The lock is
1097 * dropped before going to sleep and is reacquired afterwards.
1098 *
1099 * The function returns 0 if the @timeout elapsed, -ERESTARTSYS if it
1100 * was interrupted by a signal, and the remaining jiffies otherwise
1101 * if the condition evaluated to true before the timeout elapsed.
1102 */
1103#define wait_event_interruptible_lock_irq_timeout(wq_head, condition, lock,     \
1104                                                  timeout)                      \
1105({                                                                              \
1106        long __ret = timeout;                                                   \
1107        if (!___wait_cond_timeout(condition))                                   \
1108                __ret = __wait_event_lock_irq_timeout(                          \
1109                                        wq_head, condition, lock, timeout,      \
1110                                        TASK_INTERRUPTIBLE);                    \
1111        __ret;                                                                  \
1112})
1113
1114#define wait_event_lock_irq_timeout(wq_head, condition, lock, timeout)          \
1115({                                                                              \
1116        long __ret = timeout;                                                   \
1117        if (!___wait_cond_timeout(condition))                                   \
1118                __ret = __wait_event_lock_irq_timeout(                          \
1119                                        wq_head, condition, lock, timeout,      \
1120                                        TASK_UNINTERRUPTIBLE);                  \
1121        __ret;                                                                  \
1122})
1123
1124/*
1125 * Waitqueues which are removed from the waitqueue_head at wakeup time
1126 */
1127void prepare_to_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
1128void prepare_to_wait_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
1129long prepare_to_wait_event(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
1130void finish_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
1131long wait_woken(struct wait_queue_entry *wq_entry, unsigned mode, long timeout);
1132int woken_wake_function(struct wait_queue_entry *wq_entry, unsigned mode, int sync, void *key);
1133int autoremove_wake_function(struct wait_queue_entry *wq_entry, unsigned mode, int sync, void *key);
1134
1135#define DEFINE_WAIT_FUNC(name, function)                                        \
1136        struct wait_queue_entry name = {                                        \
1137                .private        = current,                                      \
1138                .func           = function,                                     \
1139                .entry          = LIST_HEAD_INIT((name).entry),                 \
1140        }
1141
1142#define DEFINE_WAIT(name) DEFINE_WAIT_FUNC(name, autoremove_wake_function)
1143
1144#define init_wait(wait)                                                         \
1145        do {                                                                    \
1146                (wait)->private = current;                                      \
1147                (wait)->func = autoremove_wake_function;                        \
1148                INIT_LIST_HEAD(&(wait)->entry);                                 \
1149                (wait)->flags = 0;                                              \
1150        } while (0)
1151
1152bool try_invoke_on_locked_down_task(struct task_struct *p, bool (*func)(struct task_struct *t, void *arg), void *arg);
1153
1154#endif /* _LINUX_WAIT_H */
1155