Commit fb869b6e authored by Ingo Molnar's avatar Ingo Molnar

sched/wait: Clean up wait.h details a bit

Since we are changing wait.h profoundly, use the opportunity to:

 - add a sentence to explain what this file is about
 - remove whitespace noise
 - prettify weird looking line break fixup attempts
 - standardize type definition and initialization sequences
 - use consistent style details

No code is changed.
Acked-by: default avatarPeter Zijlstra <peterz@infradead.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Link: http://lkml.kernel.org/n/tip-O8dIie5swnctqpupakatvqyq@git.kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent c2eb505b
#ifndef _LINUX_WAIT_H #ifndef _LINUX_WAIT_H
#define _LINUX_WAIT_H #define _LINUX_WAIT_H
/*
* Linux wait queue related types and methods
*/
#include <linux/list.h> #include <linux/list.h>
#include <linux/stddef.h> #include <linux/stddef.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
...@@ -13,27 +14,27 @@ typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, v ...@@ -13,27 +14,27 @@ typedef int (*wait_queue_func_t)(wait_queue_t *wait, unsigned mode, int flags, v
int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key); int default_wake_function(wait_queue_t *wait, unsigned mode, int flags, void *key);
struct __wait_queue { struct __wait_queue {
unsigned int flags; unsigned int flags;
#define WQ_FLAG_EXCLUSIVE 0x01 #define WQ_FLAG_EXCLUSIVE 0x01
void *private; void *private;
wait_queue_func_t func; wait_queue_func_t func;
struct list_head task_list; struct list_head task_list;
}; };
struct wait_bit_key { struct wait_bit_key {
void *flags; void *flags;
int bit_nr; int bit_nr;
#define WAIT_ATOMIC_T_BIT_NR -1 #define WAIT_ATOMIC_T_BIT_NR -1
}; };
struct wait_bit_queue { struct wait_bit_queue {
struct wait_bit_key key; struct wait_bit_key key;
wait_queue_t wait; wait_queue_t wait;
}; };
struct __wait_queue_head { struct __wait_queue_head {
spinlock_t lock; spinlock_t lock;
struct list_head task_list; struct list_head task_list;
}; };
typedef struct __wait_queue_head wait_queue_head_t; typedef struct __wait_queue_head wait_queue_head_t;
...@@ -84,17 +85,17 @@ extern void __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct ...@@ -84,17 +85,17 @@ extern void __init_waitqueue_head(wait_queue_head_t *q, const char *name, struct
static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p)
{ {
q->flags = 0; q->flags = 0;
q->private = p; q->private = p;
q->func = default_wake_function; q->func = default_wake_function;
} }
static inline void init_waitqueue_func_entry(wait_queue_t *q, static inline void
wait_queue_func_t func) init_waitqueue_func_entry(wait_queue_t *q, wait_queue_func_t func)
{ {
q->flags = 0; q->flags = 0;
q->private = NULL; q->private = NULL;
q->func = func; q->func = func;
} }
static inline int waitqueue_active(wait_queue_head_t *q) static inline int waitqueue_active(wait_queue_head_t *q)
...@@ -114,8 +115,8 @@ static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new) ...@@ -114,8 +115,8 @@ static inline void __add_wait_queue(wait_queue_head_t *head, wait_queue_t *new)
/* /*
* Used for wake-one threads: * Used for wake-one threads:
*/ */
static inline void __add_wait_queue_exclusive(wait_queue_head_t *q, static inline void
wait_queue_t *wait) __add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t *wait)
{ {
wait->flags |= WQ_FLAG_EXCLUSIVE; wait->flags |= WQ_FLAG_EXCLUSIVE;
__add_wait_queue(q, wait); __add_wait_queue(q, wait);
...@@ -127,23 +128,22 @@ static inline void __add_wait_queue_tail(wait_queue_head_t *head, ...@@ -127,23 +128,22 @@ static inline void __add_wait_queue_tail(wait_queue_head_t *head,
list_add_tail(&new->task_list, &head->task_list); list_add_tail(&new->task_list, &head->task_list);
} }
static inline void __add_wait_queue_tail_exclusive(wait_queue_head_t *q, static inline void
wait_queue_t *wait) __add_wait_queue_tail_exclusive(wait_queue_head_t *q, wait_queue_t *wait)
{ {
wait->flags |= WQ_FLAG_EXCLUSIVE; wait->flags |= WQ_FLAG_EXCLUSIVE;
__add_wait_queue_tail(q, wait); __add_wait_queue_tail(q, wait);
} }
static inline void __remove_wait_queue(wait_queue_head_t *head, static inline void
wait_queue_t *old) __remove_wait_queue(wait_queue_head_t *head, wait_queue_t *old)
{ {
list_del(&old->task_list); list_del(&old->task_list);
} }
void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key); void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key);
void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
void *key);
void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr); void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr);
void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr); void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
void __wake_up_bit(wait_queue_head_t *, void *, int); void __wake_up_bit(wait_queue_head_t *, void *, int);
...@@ -170,21 +170,21 @@ wait_queue_head_t *bit_waitqueue(void *, int); ...@@ -170,21 +170,21 @@ wait_queue_head_t *bit_waitqueue(void *, int);
/* /*
* Wakeup macros to be used to report events to the targets. * Wakeup macros to be used to report events to the targets.
*/ */
#define wake_up_poll(x, m) \ #define wake_up_poll(x, m) \
__wake_up(x, TASK_NORMAL, 1, (void *) (m)) __wake_up(x, TASK_NORMAL, 1, (void *) (m))
#define wake_up_locked_poll(x, m) \ #define wake_up_locked_poll(x, m) \
__wake_up_locked_key((x), TASK_NORMAL, (void *) (m)) __wake_up_locked_key((x), TASK_NORMAL, (void *) (m))
#define wake_up_interruptible_poll(x, m) \ #define wake_up_interruptible_poll(x, m) \
__wake_up(x, TASK_INTERRUPTIBLE, 1, (void *) (m)) __wake_up(x, TASK_INTERRUPTIBLE, 1, (void *) (m))
#define wake_up_interruptible_sync_poll(x, m) \ #define wake_up_interruptible_sync_poll(x, m) \
__wake_up_sync_key((x), TASK_INTERRUPTIBLE, 1, (void *) (m)) __wake_up_sync_key((x), TASK_INTERRUPTIBLE, 1, (void *) (m))
#define ___wait_cond_timeout(condition) \ #define ___wait_cond_timeout(condition) \
({ \ ({ \
bool __cond = (condition); \ bool __cond = (condition); \
if (__cond && !__ret) \ if (__cond && !__ret) \
__ret = 1; \ __ret = 1; \
__cond || !__ret; \ __cond || !__ret; \
}) })
#define ___wait_signal_pending(state) \ #define ___wait_signal_pending(state) \
...@@ -209,8 +209,8 @@ wait_queue_head_t *bit_waitqueue(void *, int); ...@@ -209,8 +209,8 @@ wait_queue_head_t *bit_waitqueue(void *, int);
if (___wait_signal_pending(state)) { \ if (___wait_signal_pending(state)) { \
__ret = -ERESTARTSYS; \ __ret = -ERESTARTSYS; \
if (exclusive) { \ if (exclusive) { \
abort_exclusive_wait(&wq, &__wait, \ abort_exclusive_wait(&wq, &__wait, \
state, NULL); \ state, NULL); \
goto __out; \ goto __out; \
} \ } \
break; \ break; \
...@@ -222,7 +222,7 @@ wait_queue_head_t *bit_waitqueue(void *, int); ...@@ -222,7 +222,7 @@ wait_queue_head_t *bit_waitqueue(void *, int);
__out: __ret; \ __out: __ret; \
}) })
#define __wait_event(wq, condition) \ #define __wait_event(wq, condition) \
(void)___wait_event(wq, condition, TASK_UNINTERRUPTIBLE, 0, 0, \ (void)___wait_event(wq, condition, TASK_UNINTERRUPTIBLE, 0, 0, \
schedule()) schedule())
...@@ -238,9 +238,9 @@ __out: __ret; \ ...@@ -238,9 +238,9 @@ __out: __ret; \
* wake_up() has to be called after changing any variable that could * wake_up() has to be called after changing any variable that could
* change the result of the wait condition. * change the result of the wait condition.
*/ */
#define wait_event(wq, condition) \ #define wait_event(wq, condition) \
do { \ do { \
if (condition) \ if (condition) \
break; \ break; \
__wait_event(wq, condition); \ __wait_event(wq, condition); \
} while (0) } while (0)
...@@ -270,7 +270,7 @@ do { \ ...@@ -270,7 +270,7 @@ do { \
#define wait_event_timeout(wq, condition, timeout) \ #define wait_event_timeout(wq, condition, timeout) \
({ \ ({ \
long __ret = timeout; \ long __ret = timeout; \
if (!(condition)) \ if (!(condition)) \
__ret = __wait_event_timeout(wq, condition, timeout); \ __ret = __wait_event_timeout(wq, condition, timeout); \
__ret; \ __ret; \
}) })
...@@ -329,7 +329,7 @@ do { \ ...@@ -329,7 +329,7 @@ do { \
({ \ ({ \
long __ret = timeout; \ long __ret = timeout; \
if (!(condition)) \ if (!(condition)) \
__ret = __wait_event_interruptible_timeout(wq, \ __ret = __wait_event_interruptible_timeout(wq, \
condition, timeout); \ condition, timeout); \
__ret; \ __ret; \
}) })
...@@ -569,7 +569,6 @@ do { \ ...@@ -569,7 +569,6 @@ do { \
? 0 : __wait_event_interruptible_locked(wq, condition, 1, 1)) ? 0 : __wait_event_interruptible_locked(wq, condition, 1, 1))
#define __wait_event_killable(wq, condition) \ #define __wait_event_killable(wq, condition) \
___wait_event(wq, condition, TASK_KILLABLE, 0, 0, schedule()) ___wait_event(wq, condition, TASK_KILLABLE, 0, 0, schedule())
...@@ -663,7 +662,7 @@ do { \ ...@@ -663,7 +662,7 @@ do { \
#define __wait_event_interruptible_lock_irq(wq, condition, lock, cmd) \ #define __wait_event_interruptible_lock_irq(wq, condition, lock, cmd) \
___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \ ___wait_event(wq, condition, TASK_INTERRUPTIBLE, 0, 0, \
spin_unlock_irq(&lock); \ spin_unlock_irq(&lock); \
cmd; \ cmd; \
schedule(); \ schedule(); \
...@@ -698,7 +697,7 @@ do { \ ...@@ -698,7 +697,7 @@ do { \
({ \ ({ \
int __ret = 0; \ int __ret = 0; \
if (!(condition)) \ if (!(condition)) \
__ret = __wait_event_interruptible_lock_irq(wq, \ __ret = __wait_event_interruptible_lock_irq(wq, \
condition, lock, cmd); \ condition, lock, cmd); \
__ret; \ __ret; \
}) })
...@@ -734,18 +733,18 @@ do { \ ...@@ -734,18 +733,18 @@ do { \
__ret; \ __ret; \
}) })
#define __wait_event_interruptible_lock_irq_timeout(wq, condition, \ #define __wait_event_interruptible_lock_irq_timeout(wq, condition, \
lock, timeout) \ lock, timeout) \
___wait_event(wq, ___wait_cond_timeout(condition), \ ___wait_event(wq, ___wait_cond_timeout(condition), \
TASK_INTERRUPTIBLE, 0, ret, \ TASK_INTERRUPTIBLE, 0, ret, \
spin_unlock_irq(&lock); \ spin_unlock_irq(&lock); \
__ret = schedule_timeout(__ret); \ __ret = schedule_timeout(__ret); \
spin_lock_irq(&lock)); spin_lock_irq(&lock));
/** /**
* wait_event_interruptible_lock_irq_timeout - sleep until a condition gets true or a timeout elapses. * wait_event_interruptible_lock_irq_timeout - sleep until a condition gets
* The condition is checked under the lock. This is expected * true or a timeout elapses. The condition is checked under
* to be called with the lock taken. * the lock. This is expected to be called with the lock taken.
* @wq: the waitqueue to wait on * @wq: the waitqueue to wait on
* @condition: a C expression for the event to wait for * @condition: a C expression for the event to wait for
* @lock: a locked spinlock_t, which will be released before schedule() * @lock: a locked spinlock_t, which will be released before schedule()
...@@ -783,11 +782,9 @@ do { \ ...@@ -783,11 +782,9 @@ do { \
* We plan to remove these interfaces. * We plan to remove these interfaces.
*/ */
extern void sleep_on(wait_queue_head_t *q); extern void sleep_on(wait_queue_head_t *q);
extern long sleep_on_timeout(wait_queue_head_t *q, extern long sleep_on_timeout(wait_queue_head_t *q, signed long timeout);
signed long timeout);
extern void interruptible_sleep_on(wait_queue_head_t *q); extern void interruptible_sleep_on(wait_queue_head_t *q);
extern long interruptible_sleep_on_timeout(wait_queue_head_t *q, extern long interruptible_sleep_on_timeout(wait_queue_head_t *q, signed long timeout);
signed long timeout);
/* /*
* Waitqueues which are removed from the waitqueue_head at wakeup time * Waitqueues which are removed from the waitqueue_head at wakeup time
...@@ -795,8 +792,7 @@ extern long interruptible_sleep_on_timeout(wait_queue_head_t *q, ...@@ -795,8 +792,7 @@ extern long interruptible_sleep_on_timeout(wait_queue_head_t *q,
void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state); void prepare_to_wait(wait_queue_head_t *q, wait_queue_t *wait, int state);
void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state); void prepare_to_wait_exclusive(wait_queue_head_t *q, wait_queue_t *wait, int state);
void finish_wait(wait_queue_head_t *q, wait_queue_t *wait); void finish_wait(wait_queue_head_t *q, wait_queue_t *wait);
void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait, unsigned int mode, void *key);
unsigned int mode, void *key);
int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key); int autoremove_wake_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
...@@ -842,8 +838,8 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); ...@@ -842,8 +838,8 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key);
* One uses wait_on_bit() where one is waiting for the bit to clear, * One uses wait_on_bit() where one is waiting for the bit to clear,
* but has no intention of setting it. * but has no intention of setting it.
*/ */
static inline int wait_on_bit(void *word, int bit, static inline int
int (*action)(void *), unsigned mode) wait_on_bit(void *word, int bit, int (*action)(void *), unsigned mode)
{ {
if (!test_bit(bit, word)) if (!test_bit(bit, word))
return 0; return 0;
...@@ -866,8 +862,8 @@ static inline int wait_on_bit(void *word, int bit, ...@@ -866,8 +862,8 @@ static inline int wait_on_bit(void *word, int bit,
* One uses wait_on_bit_lock() where one is waiting for the bit to * One uses wait_on_bit_lock() where one is waiting for the bit to
* clear with the intention of setting it, and when done, clearing it. * clear with the intention of setting it, and when done, clearing it.
*/ */
static inline int wait_on_bit_lock(void *word, int bit, static inline int
int (*action)(void *), unsigned mode) wait_on_bit_lock(void *word, int bit, int (*action)(void *), unsigned mode)
{ {
if (!test_and_set_bit(bit, word)) if (!test_and_set_bit(bit, word))
return 0; return 0;
...@@ -891,5 +887,5 @@ int wait_on_atomic_t(atomic_t *val, int (*action)(atomic_t *), unsigned mode) ...@@ -891,5 +887,5 @@ int wait_on_atomic_t(atomic_t *val, int (*action)(atomic_t *), unsigned mode)
return 0; return 0;
return out_of_line_wait_on_atomic_t(val, action, mode); return out_of_line_wait_on_atomic_t(val, action, mode);
} }
#endif #endif /* _LINUX_WAIT_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment