|
@@ -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) \
|