1 /* Copyright (c) 2015 Google Inc
2 * Davide Libenzi <dlibenzi@google.com>
3 * See LICENSE for details.
7 #include <completion.h>
9 void completion_init(struct completion *comp, int count)
11 cv_init_irqsave(&comp->cv);
15 void completion_complete(struct completion *comp, int how_much)
19 cv_lock_irqsave(&comp->cv, &state);
20 comp->count -= how_much;
22 __cv_broadcast(&comp->cv);
23 cv_unlock_irqsave(&comp->cv, &state);
26 void completion_wait(struct completion *comp)
30 cv_lock_irqsave(&comp->cv, &state);
31 if (comp->count > 0) {
32 cv_wait_and_unlock(&comp->cv);
33 enable_irqsave(&state);
35 cv_unlock_irqsave(&comp->cv, &state);