lkml.org 
[lkml]   [2013]   [Oct]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 04/16] sched/wait: Introduce ___wait_event()
    There's far too much duplication in the __wait_event macros; in order
    to fix this introduce ___wait_event() a macro with the capability to
    replace most other macros.

    With the previous patches changing the various __wait_event*()
    implementations to be more uniform; we can now collapse the lot
    without also changing generated code.

    Reviewed-by: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: Peter Zijlstra <peterz@infradead.org>
    ---
    include/linux/wait.h | 36 ++++++++++++++++++++++++++++++++++++
    1 file changed, 36 insertions(+)

    --- a/include/linux/wait.h
    +++ b/include/linux/wait.h
    @@ -187,6 +187,42 @@ wait_queue_head_t *bit_waitqueue(void *,
    __cond || !ret; \
    })

    +#define ___wait_signal_pending(state) \
    + ((state == TASK_INTERRUPTIBLE && signal_pending(current)) || \
    + (state == TASK_KILLABLE && fatal_signal_pending(current)))
    +
    +#define ___wait_nop_ret int ret __always_unused
    +
    +#define ___wait_event(wq, condition, state, exclusive, ret, cmd) \
    +do { \
    + __label__ __out; \
    + DEFINE_WAIT(__wait); \
    + \
    + for (;;) { \
    + if (exclusive) \
    + prepare_to_wait_exclusive(&wq, &__wait, state); \
    + else \
    + prepare_to_wait(&wq, &__wait, state); \
    + \
    + if (condition) \
    + break; \
    + \
    + if (___wait_signal_pending(state)) { \
    + ret = -ERESTARTSYS; \
    + if (exclusive) { \
    + abort_exclusive_wait(&wq, &__wait, \
    + state, NULL); \
    + goto __out; \
    + } \
    + break; \
    + } \
    + \
    + cmd; \
    + } \
    + finish_wait(&wq, &__wait); \
    +__out: ; \
    +} while (0)
    +
    #define __wait_event(wq, condition) \
    do { \
    DEFINE_WAIT(__wait); \



    \
     
     \ /
      Last update: 2013-10-02 12:21    [W:2.384 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site