The ___wait_event macro satisfies the requirements for making use of the per-task wait_queue_t, so use it. This should make the stack footprint of all users of the wait_event_* macros smaller.
Signed-off-by: Rasmus Villemoes <[email protected]> --- include/linux/wait.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/include/linux/wait.h b/include/linux/wait.h index 94279be..5f51252 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h @@ -207,17 +207,17 @@ wait_queue_head_t *bit_waitqueue(void *, int); #define ___wait_event(wq, condition, state, exclusive, ret, cmd) \ ({ \ __label__ __out; \ - wait_queue_t __wait; \ + wait_queue_t *__wait = current_wq_get(); \ long __ret = ret; /* explicit shadow */ \ \ - INIT_LIST_HEAD(&__wait.task_list); \ + INIT_LIST_HEAD(&__wait->task_list); \ if (exclusive) \ - __wait.flags = WQ_FLAG_EXCLUSIVE; \ + __wait->flags = WQ_FLAG_EXCLUSIVE; \ else \ - __wait.flags = 0; \ + __wait->flags = 0; \ \ for (;;) { \ - long __int = prepare_to_wait_event(&wq, &__wait, state);\ + long __int = prepare_to_wait_event(&wq, __wait, state); \ \ if (condition) \ break; \ @@ -225,7 +225,7 @@ wait_queue_head_t *bit_waitqueue(void *, int); if (___wait_is_interruptible(state) && __int) { \ __ret = __int; \ if (exclusive) { \ - abort_exclusive_wait(&wq, &__wait, \ + abort_exclusive_wait(&wq, __wait, \ state, NULL); \ goto __out; \ } \ @@ -234,8 +234,9 @@ wait_queue_head_t *bit_waitqueue(void *, int); \ cmd; \ } \ - finish_wait(&wq, &__wait); \ -__out: __ret; \ + finish_wait(&wq, __wait); \ +__out: current_wq_put(__wait); \ + __ret; \ }) #define __wait_event(wq, condition) \ -- 1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

