Lines Matching refs:completion
59 struct completion { struct
83 init_completion(struct completion *completion) in init_completion() argument
86 mutex_init(&completion->c_lock, MUTEX_DEFAULT, IPL_SCHED); in init_completion()
87 cv_init(&completion->c_cv, "lnxcmplt"); in init_completion()
88 completion->c_done = 0; in init_completion()
95 reinit_completion(struct completion *completion) in reinit_completion() argument
98 completion->c_done = 0; in reinit_completion()
105 destroy_completion(struct completion *completion) in destroy_completion() argument
107 KASSERT(!cv_has_waiters(&completion->c_cv)); in destroy_completion()
108 cv_destroy(&completion->c_cv); in destroy_completion()
109 mutex_destroy(&completion->c_lock); in destroy_completion()
116 complete(struct completion *completion) in complete() argument
119 mutex_enter(&completion->c_lock); in complete()
122 if (completion->c_done >= 0) { in complete()
123 KASSERT(completion->c_done < INT_MAX); /* XXX check */ in complete()
124 completion->c_done++; in complete()
125 cv_signal(&completion->c_cv); in complete()
127 KASSERT(completion->c_done == -1); in complete()
130 mutex_exit(&completion->c_lock); in complete()
138 complete_all(struct completion *completion) in complete_all() argument
141 mutex_enter(&completion->c_lock); in complete_all()
144 if (completion->c_done >= 0) { in complete_all()
145 completion->c_done = -1; in complete_all()
146 cv_broadcast(&completion->c_cv); in complete_all()
148 KASSERT(completion->c_done == -1); in complete_all()
151 mutex_exit(&completion->c_lock); in complete_all()
166 INIT_COMPLETION_blorp(struct completion *completion) in INIT_COMPLETION_blorp() argument
169 mutex_enter(&completion->c_lock); in INIT_COMPLETION_blorp()
170 completion->c_done = 0; in INIT_COMPLETION_blorp()
172 mutex_exit(&completion->c_lock); in INIT_COMPLETION_blorp()
176 _completion_claim(struct completion *completion) in _completion_claim() argument
179 KASSERT(mutex_owned(&completion->c_lock)); in _completion_claim()
180 KASSERT(completion->c_done != 0); in _completion_claim()
181 if (completion->c_done > 0) in _completion_claim()
182 completion->c_done--; in _completion_claim()
184 KASSERT(completion->c_done == -1); in _completion_claim()
192 wait_for_completion_interruptible_timeout(struct completion *completion, in wait_for_completion_interruptible_timeout() argument
199 mutex_enter(&completion->c_lock); in wait_for_completion_interruptible_timeout()
202 while (completion->c_done == 0) { in wait_for_completion_interruptible_timeout()
207 error = cv_timedwait_sig(&completion->c_cv, in wait_for_completion_interruptible_timeout()
208 &completion->c_lock, MIN(ticks, INT_MAX/2)); in wait_for_completion_interruptible_timeout()
217 _completion_claim(completion); in wait_for_completion_interruptible_timeout()
220 out: mutex_exit(&completion->c_lock); in wait_for_completion_interruptible_timeout()
232 wait_for_completion_timeout(struct completion *completion, unsigned long ticks) in wait_for_completion_timeout() argument
238 mutex_enter(&completion->c_lock); in wait_for_completion_timeout()
241 while (completion->c_done == 0) { in wait_for_completion_timeout()
246 error = cv_timedwait(&completion->c_cv, &completion->c_lock, in wait_for_completion_timeout()
256 _completion_claim(completion); in wait_for_completion_timeout()
259 out: mutex_exit(&completion->c_lock); in wait_for_completion_timeout()
272 wait_for_completion_interruptible(struct completion *completion) in wait_for_completion_interruptible() argument
276 mutex_enter(&completion->c_lock); in wait_for_completion_interruptible()
279 while (completion->c_done == 0) { in wait_for_completion_interruptible()
280 error = cv_wait_sig(&completion->c_cv, &completion->c_lock); in wait_for_completion_interruptible()
286 _completion_claim(completion); in wait_for_completion_interruptible()
289 out: mutex_exit(&completion->c_lock); in wait_for_completion_interruptible()
306 wait_for_completion_killable(struct completion *completion) in wait_for_completion_killable() argument
309 return wait_for_completion_interruptible(completion); in wait_for_completion_killable()
313 wait_for_completion(struct completion *completion) in wait_for_completion() argument
316 mutex_enter(&completion->c_lock); in wait_for_completion()
317 while (completion->c_done == 0) in wait_for_completion()
318 cv_wait(&completion->c_cv, &completion->c_lock); in wait_for_completion()
319 _completion_claim(completion); in wait_for_completion()
320 mutex_exit(&completion->c_lock); in wait_for_completion()
328 try_wait_for_completion(struct completion *completion) in try_wait_for_completion() argument
332 mutex_enter(&completion->c_lock); in try_wait_for_completion()
333 if (completion->c_done == 0) { in try_wait_for_completion()
336 _completion_claim(completion); in try_wait_for_completion()
339 mutex_exit(&completion->c_lock); in try_wait_for_completion()