The completion API Completions are simple to use #include struct completion *my_compl; init_completion(&my_compl); /* ... or ... */ DECLARE_COMPLETION(my_compl); void wait_for_completion(&my_compl); void complete(&my_compl); /* Only wakes one */ void complete_all(&my_compl);