Commit ced58fc7 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

closures: closure_wait_event()

Like wait_event() - except, because it uses closures and closure
waitlists it doesn't have the restriction on modifying task state inside
the condition check, like wait_event() does.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Acked-by: default avatarColy Li <colyli@suse.de>
parent bd0d22e4
...@@ -374,4 +374,26 @@ static inline void closure_call(struct closure *cl, closure_fn fn, ...@@ -374,4 +374,26 @@ static inline void closure_call(struct closure *cl, closure_fn fn,
continue_at_nobarrier(cl, fn, wq); continue_at_nobarrier(cl, fn, wq);
} }
#define __closure_wait_event(waitlist, _cond) \
do { \
struct closure cl; \
\
closure_init_stack(&cl); \
\
while (1) { \
closure_wait(waitlist, &cl); \
if (_cond) \
break; \
closure_sync(&cl); \
} \
closure_wake_up(waitlist); \
closure_sync(&cl); \
} while (0)
#define closure_wait_event(waitlist, _cond) \
do { \
if (!(_cond)) \
__closure_wait_event(waitlist, _cond); \
} while (0)
#endif /* _LINUX_CLOSURE_H */ #endif /* _LINUX_CLOSURE_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