diff options
Diffstat (limited to 'include/linux/wait.h')
| -rw-r--r-- | include/linux/wait.h | 14 | 
1 files changed, 13 insertions, 1 deletions
diff --git a/include/linux/wait.h b/include/linux/wait.h index e7d9d9ed14f5..bd68819f0815 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h @@ -191,11 +191,23 @@ wait_queue_head_t *bit_waitqueue(void *, int);  	(!__builtin_constant_p(state) ||				\  		state == TASK_INTERRUPTIBLE || state == TASK_KILLABLE)	\ +/* + * The below macro ___wait_event() has an explicit shadow of the __ret + * variable when used from the wait_event_*() macros. + * + * This is so that both can use the ___wait_cond_timeout() construct + * to wrap the condition. + * + * The type inconsistency of the wait_event_*() __ret variable is also + * on purpose; we use long where we can return timeout values and int + * otherwise. + */ +  #define ___wait_event(wq, condition, state, exclusive, ret, cmd)	\  ({									\  	__label__ __out;						\  	wait_queue_t __wait;						\ -	long __ret = ret;						\ +	long __ret = ret;	/* explicit shadow */			\  									\  	INIT_LIST_HEAD(&__wait.task_list);				\  	if (exclusive)							\  | 
