1 // SPDX-License-Identifier: GPL-2.0 1 // SPDX-License-Identifier: GPL-2.0 2 2 3 /* 3 /* 4 * Generic wait-for-completion handler; 4 * Generic wait-for-completion handler; 5 * 5 * 6 * It differs from semaphores in that their de 6 * It differs from semaphores in that their default case is the opposite, 7 * wait_for_completion default blocks whereas 7 * wait_for_completion default blocks whereas semaphore default non-block. The 8 * interface also makes it easy to 'complete' 8 * interface also makes it easy to 'complete' multiple waiting threads, 9 * something which isn't entirely natural for 9 * something which isn't entirely natural for semaphores. 10 * 10 * 11 * But more importantly, the primitive documen 11 * But more importantly, the primitive documents the usage. Semaphores would 12 * typically be used for exclusion which gives 12 * typically be used for exclusion which gives rise to priority inversion. 13 * Waiting for completion is a typically sync 13 * Waiting for completion is a typically sync point, but not an exclusion point. 14 */ 14 */ 15 15 16 static void complete_with_flags(struct complet << 17 { << 18 unsigned long flags; << 19 << 20 raw_spin_lock_irqsave(&x->wait.lock, f << 21 << 22 if (x->done != UINT_MAX) << 23 x->done++; << 24 swake_up_locked(&x->wait, wake_flags); << 25 raw_spin_unlock_irqrestore(&x->wait.lo << 26 } << 27 << 28 void complete_on_current_cpu(struct completion << 29 { << 30 return complete_with_flags(x, WF_CURRE << 31 } << 32 << 33 /** 16 /** 34 * complete: - signals a single thread waiting 17 * complete: - signals a single thread waiting on this completion 35 * @x: holds the state of this particular com 18 * @x: holds the state of this particular completion 36 * 19 * 37 * This will wake up a single thread waiting o 20 * This will wake up a single thread waiting on this completion. Threads will be 38 * awakened in the same order in which they we 21 * awakened in the same order in which they were queued. 39 * 22 * 40 * See also complete_all(), wait_for_completio 23 * See also complete_all(), wait_for_completion() and related routines. 41 * 24 * 42 * If this function wakes up a task, it execut 25 * If this function wakes up a task, it executes a full memory barrier before 43 * accessing the task state. 26 * accessing the task state. 44 */ 27 */ 45 void complete(struct completion *x) 28 void complete(struct completion *x) 46 { 29 { 47 complete_with_flags(x, 0); !! 30 unsigned long flags; >> 31 >> 32 raw_spin_lock_irqsave(&x->wait.lock, flags); >> 33 >> 34 if (x->done != UINT_MAX) >> 35 x->done++; >> 36 swake_up_locked(&x->wait); >> 37 raw_spin_unlock_irqrestore(&x->wait.lock, flags); 48 } 38 } 49 EXPORT_SYMBOL(complete); 39 EXPORT_SYMBOL(complete); 50 40 51 /** 41 /** 52 * complete_all: - signals all threads waiting 42 * complete_all: - signals all threads waiting on this completion 53 * @x: holds the state of this particular com 43 * @x: holds the state of this particular completion 54 * 44 * 55 * This will wake up all threads waiting on th 45 * This will wake up all threads waiting on this particular completion event. 56 * 46 * 57 * If this function wakes up a task, it execut 47 * If this function wakes up a task, it executes a full memory barrier before 58 * accessing the task state. 48 * accessing the task state. 59 * 49 * 60 * Since complete_all() sets the completion of 50 * Since complete_all() sets the completion of @x permanently to done 61 * to allow multiple waiters to finish, a call 51 * to allow multiple waiters to finish, a call to reinit_completion() 62 * must be used on @x if @x is to be used agai 52 * must be used on @x if @x is to be used again. The code must make 63 * sure that all waiters have woken and finish 53 * sure that all waiters have woken and finished before reinitializing 64 * @x. Also note that the function completion_ 54 * @x. Also note that the function completion_done() can not be used 65 * to know if there are still waiters after co 55 * to know if there are still waiters after complete_all() has been called. 66 */ 56 */ 67 void complete_all(struct completion *x) 57 void complete_all(struct completion *x) 68 { 58 { 69 unsigned long flags; 59 unsigned long flags; 70 60 71 lockdep_assert_RT_in_threaded_ctx(); 61 lockdep_assert_RT_in_threaded_ctx(); 72 62 73 raw_spin_lock_irqsave(&x->wait.lock, f 63 raw_spin_lock_irqsave(&x->wait.lock, flags); 74 x->done = UINT_MAX; 64 x->done = UINT_MAX; 75 swake_up_all_locked(&x->wait); 65 swake_up_all_locked(&x->wait); 76 raw_spin_unlock_irqrestore(&x->wait.lo 66 raw_spin_unlock_irqrestore(&x->wait.lock, flags); 77 } 67 } 78 EXPORT_SYMBOL(complete_all); 68 EXPORT_SYMBOL(complete_all); 79 69 80 static inline long __sched 70 static inline long __sched 81 do_wait_for_common(struct completion *x, 71 do_wait_for_common(struct completion *x, 82 long (*action)(long), long 72 long (*action)(long), long timeout, int state) 83 { 73 { 84 if (!x->done) { 74 if (!x->done) { 85 DECLARE_SWAITQUEUE(wait); 75 DECLARE_SWAITQUEUE(wait); 86 76 87 do { 77 do { 88 if (signal_pending_sta 78 if (signal_pending_state(state, current)) { 89 timeout = -ERE 79 timeout = -ERESTARTSYS; 90 break; 80 break; 91 } 81 } 92 __prepare_to_swait(&x- 82 __prepare_to_swait(&x->wait, &wait); 93 __set_current_state(st 83 __set_current_state(state); 94 raw_spin_unlock_irq(&x 84 raw_spin_unlock_irq(&x->wait.lock); 95 timeout = action(timeo 85 timeout = action(timeout); 96 raw_spin_lock_irq(&x-> 86 raw_spin_lock_irq(&x->wait.lock); 97 } while (!x->done && timeout); 87 } while (!x->done && timeout); 98 __finish_swait(&x->wait, &wait 88 __finish_swait(&x->wait, &wait); 99 if (!x->done) 89 if (!x->done) 100 return timeout; 90 return timeout; 101 } 91 } 102 if (x->done != UINT_MAX) 92 if (x->done != UINT_MAX) 103 x->done--; 93 x->done--; 104 return timeout ?: 1; 94 return timeout ?: 1; 105 } 95 } 106 96 107 static inline long __sched 97 static inline long __sched 108 __wait_for_common(struct completion *x, 98 __wait_for_common(struct completion *x, 109 long (*action)(long), long t 99 long (*action)(long), long timeout, int state) 110 { 100 { 111 might_sleep(); 101 might_sleep(); 112 102 113 complete_acquire(x); 103 complete_acquire(x); 114 104 115 raw_spin_lock_irq(&x->wait.lock); 105 raw_spin_lock_irq(&x->wait.lock); 116 timeout = do_wait_for_common(x, action 106 timeout = do_wait_for_common(x, action, timeout, state); 117 raw_spin_unlock_irq(&x->wait.lock); 107 raw_spin_unlock_irq(&x->wait.lock); 118 108 119 complete_release(x); 109 complete_release(x); 120 110 121 return timeout; 111 return timeout; 122 } 112 } 123 113 124 static long __sched 114 static long __sched 125 wait_for_common(struct completion *x, long tim 115 wait_for_common(struct completion *x, long timeout, int state) 126 { 116 { 127 return __wait_for_common(x, schedule_t 117 return __wait_for_common(x, schedule_timeout, timeout, state); 128 } 118 } 129 119 130 static long __sched 120 static long __sched 131 wait_for_common_io(struct completion *x, long 121 wait_for_common_io(struct completion *x, long timeout, int state) 132 { 122 { 133 return __wait_for_common(x, io_schedul 123 return __wait_for_common(x, io_schedule_timeout, timeout, state); 134 } 124 } 135 125 136 /** 126 /** 137 * wait_for_completion: - waits for completion 127 * wait_for_completion: - waits for completion of a task 138 * @x: holds the state of this particular com 128 * @x: holds the state of this particular completion 139 * 129 * 140 * This waits to be signaled for completion of 130 * This waits to be signaled for completion of a specific task. It is NOT 141 * interruptible and there is no timeout. 131 * interruptible and there is no timeout. 142 * 132 * 143 * See also similar routines (i.e. wait_for_co 133 * See also similar routines (i.e. wait_for_completion_timeout()) with timeout 144 * and interrupt capability. Also see complete 134 * and interrupt capability. Also see complete(). 145 */ 135 */ 146 void __sched wait_for_completion(struct comple 136 void __sched wait_for_completion(struct completion *x) 147 { 137 { 148 wait_for_common(x, MAX_SCHEDULE_TIMEOU 138 wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_UNINTERRUPTIBLE); 149 } 139 } 150 EXPORT_SYMBOL(wait_for_completion); 140 EXPORT_SYMBOL(wait_for_completion); 151 141 152 /** 142 /** 153 * wait_for_completion_timeout: - waits for co 143 * wait_for_completion_timeout: - waits for completion of a task (w/timeout) 154 * @x: holds the state of this particular com 144 * @x: holds the state of this particular completion 155 * @timeout: timeout value in jiffies 145 * @timeout: timeout value in jiffies 156 * 146 * 157 * This waits for either a completion of a spe 147 * This waits for either a completion of a specific task to be signaled or for a 158 * specified timeout to expire. The timeout is 148 * specified timeout to expire. The timeout is in jiffies. It is not 159 * interruptible. 149 * interruptible. 160 * 150 * 161 * Return: 0 if timed out, and positive (at le 151 * Return: 0 if timed out, and positive (at least 1, or number of jiffies left 162 * till timeout) if completed. 152 * till timeout) if completed. 163 */ 153 */ 164 unsigned long __sched 154 unsigned long __sched 165 wait_for_completion_timeout(struct completion 155 wait_for_completion_timeout(struct completion *x, unsigned long timeout) 166 { 156 { 167 return wait_for_common(x, timeout, TAS 157 return wait_for_common(x, timeout, TASK_UNINTERRUPTIBLE); 168 } 158 } 169 EXPORT_SYMBOL(wait_for_completion_timeout); 159 EXPORT_SYMBOL(wait_for_completion_timeout); 170 160 171 /** 161 /** 172 * wait_for_completion_io: - waits for complet 162 * wait_for_completion_io: - waits for completion of a task 173 * @x: holds the state of this particular com 163 * @x: holds the state of this particular completion 174 * 164 * 175 * This waits to be signaled for completion of 165 * This waits to be signaled for completion of a specific task. It is NOT 176 * interruptible and there is no timeout. The 166 * interruptible and there is no timeout. The caller is accounted as waiting 177 * for IO (which traditionally means blkio onl 167 * for IO (which traditionally means blkio only). 178 */ 168 */ 179 void __sched wait_for_completion_io(struct com 169 void __sched wait_for_completion_io(struct completion *x) 180 { 170 { 181 wait_for_common_io(x, MAX_SCHEDULE_TIM 171 wait_for_common_io(x, MAX_SCHEDULE_TIMEOUT, TASK_UNINTERRUPTIBLE); 182 } 172 } 183 EXPORT_SYMBOL(wait_for_completion_io); 173 EXPORT_SYMBOL(wait_for_completion_io); 184 174 185 /** 175 /** 186 * wait_for_completion_io_timeout: - waits for 176 * wait_for_completion_io_timeout: - waits for completion of a task (w/timeout) 187 * @x: holds the state of this particular com 177 * @x: holds the state of this particular completion 188 * @timeout: timeout value in jiffies 178 * @timeout: timeout value in jiffies 189 * 179 * 190 * This waits for either a completion of a spe 180 * This waits for either a completion of a specific task to be signaled or for a 191 * specified timeout to expire. The timeout is 181 * specified timeout to expire. The timeout is in jiffies. It is not 192 * interruptible. The caller is accounted as w 182 * interruptible. The caller is accounted as waiting for IO (which traditionally 193 * means blkio only). 183 * means blkio only). 194 * 184 * 195 * Return: 0 if timed out, and positive (at le 185 * Return: 0 if timed out, and positive (at least 1, or number of jiffies left 196 * till timeout) if completed. 186 * till timeout) if completed. 197 */ 187 */ 198 unsigned long __sched 188 unsigned long __sched 199 wait_for_completion_io_timeout(struct completi 189 wait_for_completion_io_timeout(struct completion *x, unsigned long timeout) 200 { 190 { 201 return wait_for_common_io(x, timeout, 191 return wait_for_common_io(x, timeout, TASK_UNINTERRUPTIBLE); 202 } 192 } 203 EXPORT_SYMBOL(wait_for_completion_io_timeout); 193 EXPORT_SYMBOL(wait_for_completion_io_timeout); 204 194 205 /** 195 /** 206 * wait_for_completion_interruptible: - waits 196 * wait_for_completion_interruptible: - waits for completion of a task (w/intr) 207 * @x: holds the state of this particular com 197 * @x: holds the state of this particular completion 208 * 198 * 209 * This waits for completion of a specific tas 199 * This waits for completion of a specific task to be signaled. It is 210 * interruptible. 200 * interruptible. 211 * 201 * 212 * Return: -ERESTARTSYS if interrupted, 0 if c 202 * Return: -ERESTARTSYS if interrupted, 0 if completed. 213 */ 203 */ 214 int __sched wait_for_completion_interruptible( 204 int __sched wait_for_completion_interruptible(struct completion *x) 215 { 205 { 216 long t = wait_for_common(x, MAX_SCHEDU 206 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE); 217 207 218 if (t == -ERESTARTSYS) 208 if (t == -ERESTARTSYS) 219 return t; 209 return t; 220 return 0; 210 return 0; 221 } 211 } 222 EXPORT_SYMBOL(wait_for_completion_interruptibl 212 EXPORT_SYMBOL(wait_for_completion_interruptible); 223 213 224 /** 214 /** 225 * wait_for_completion_interruptible_timeout: 215 * wait_for_completion_interruptible_timeout: - waits for completion (w/(to,intr)) 226 * @x: holds the state of this particular com 216 * @x: holds the state of this particular completion 227 * @timeout: timeout value in jiffies 217 * @timeout: timeout value in jiffies 228 * 218 * 229 * This waits for either a completion of a spe 219 * This waits for either a completion of a specific task to be signaled or for a 230 * specified timeout to expire. It is interrup 220 * specified timeout to expire. It is interruptible. The timeout is in jiffies. 231 * 221 * 232 * Return: -ERESTARTSYS if interrupted, 0 if t 222 * Return: -ERESTARTSYS if interrupted, 0 if timed out, positive (at least 1, 233 * or number of jiffies left till timeout) if 223 * or number of jiffies left till timeout) if completed. 234 */ 224 */ 235 long __sched 225 long __sched 236 wait_for_completion_interruptible_timeout(stru 226 wait_for_completion_interruptible_timeout(struct completion *x, 237 unsi 227 unsigned long timeout) 238 { 228 { 239 return wait_for_common(x, timeout, TAS 229 return wait_for_common(x, timeout, TASK_INTERRUPTIBLE); 240 } 230 } 241 EXPORT_SYMBOL(wait_for_completion_interruptibl 231 EXPORT_SYMBOL(wait_for_completion_interruptible_timeout); 242 232 243 /** 233 /** 244 * wait_for_completion_killable: - waits for c 234 * wait_for_completion_killable: - waits for completion of a task (killable) 245 * @x: holds the state of this particular com 235 * @x: holds the state of this particular completion 246 * 236 * 247 * This waits to be signaled for completion of 237 * This waits to be signaled for completion of a specific task. It can be 248 * interrupted by a kill signal. 238 * interrupted by a kill signal. 249 * 239 * 250 * Return: -ERESTARTSYS if interrupted, 0 if c 240 * Return: -ERESTARTSYS if interrupted, 0 if completed. 251 */ 241 */ 252 int __sched wait_for_completion_killable(struc 242 int __sched wait_for_completion_killable(struct completion *x) 253 { 243 { 254 long t = wait_for_common(x, MAX_SCHEDU 244 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_KILLABLE); 255 245 256 if (t == -ERESTARTSYS) 246 if (t == -ERESTARTSYS) 257 return t; 247 return t; 258 return 0; 248 return 0; 259 } 249 } 260 EXPORT_SYMBOL(wait_for_completion_killable); 250 EXPORT_SYMBOL(wait_for_completion_killable); 261 251 262 int __sched wait_for_completion_state(struct c 252 int __sched wait_for_completion_state(struct completion *x, unsigned int state) 263 { 253 { 264 long t = wait_for_common(x, MAX_SCHEDU 254 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, state); 265 255 266 if (t == -ERESTARTSYS) 256 if (t == -ERESTARTSYS) 267 return t; 257 return t; 268 return 0; 258 return 0; 269 } 259 } 270 EXPORT_SYMBOL(wait_for_completion_state); 260 EXPORT_SYMBOL(wait_for_completion_state); 271 261 272 /** 262 /** 273 * wait_for_completion_killable_timeout: - wai 263 * wait_for_completion_killable_timeout: - waits for completion of a task (w/(to,killable)) 274 * @x: holds the state of this particular com 264 * @x: holds the state of this particular completion 275 * @timeout: timeout value in jiffies 265 * @timeout: timeout value in jiffies 276 * 266 * 277 * This waits for either a completion of a spe 267 * This waits for either a completion of a specific task to be 278 * signaled or for a specified timeout to expi 268 * signaled or for a specified timeout to expire. It can be 279 * interrupted by a kill signal. The timeout i 269 * interrupted by a kill signal. The timeout is in jiffies. 280 * 270 * 281 * Return: -ERESTARTSYS if interrupted, 0 if t 271 * Return: -ERESTARTSYS if interrupted, 0 if timed out, positive (at least 1, 282 * or number of jiffies left till timeout) if 272 * or number of jiffies left till timeout) if completed. 283 */ 273 */ 284 long __sched 274 long __sched 285 wait_for_completion_killable_timeout(struct co 275 wait_for_completion_killable_timeout(struct completion *x, 286 unsigned 276 unsigned long timeout) 287 { 277 { 288 return wait_for_common(x, timeout, TAS 278 return wait_for_common(x, timeout, TASK_KILLABLE); 289 } 279 } 290 EXPORT_SYMBOL(wait_for_completion_killable_tim 280 EXPORT_SYMBOL(wait_for_completion_killable_timeout); 291 281 292 /** 282 /** 293 * try_wait_for_completion - try to decre 283 * try_wait_for_completion - try to decrement a completion without blocking 294 * @x: completion structure 284 * @x: completion structure 295 * 285 * 296 * Return: 0 if a decrement cannot be don 286 * Return: 0 if a decrement cannot be done without blocking 297 * 1 if a decrement succeeded. 287 * 1 if a decrement succeeded. 298 * 288 * 299 * If a completion is being used as a cou 289 * If a completion is being used as a counting completion, 300 * attempt to decrement the counter witho 290 * attempt to decrement the counter without blocking. This 301 * enables us to avoid waiting if the res 291 * enables us to avoid waiting if the resource the completion 302 * is protecting is not available. 292 * is protecting is not available. 303 */ 293 */ 304 bool try_wait_for_completion(struct completion 294 bool try_wait_for_completion(struct completion *x) 305 { 295 { 306 unsigned long flags; 296 unsigned long flags; 307 bool ret = true; 297 bool ret = true; 308 298 309 /* 299 /* 310 * Since x->done will need to be locke 300 * Since x->done will need to be locked only 311 * in the non-blocking case, we check 301 * in the non-blocking case, we check x->done 312 * first without taking the lock so we 302 * first without taking the lock so we can 313 * return early in the blocking case. 303 * return early in the blocking case. 314 */ 304 */ 315 if (!READ_ONCE(x->done)) 305 if (!READ_ONCE(x->done)) 316 return false; 306 return false; 317 307 318 raw_spin_lock_irqsave(&x->wait.lock, f 308 raw_spin_lock_irqsave(&x->wait.lock, flags); 319 if (!x->done) 309 if (!x->done) 320 ret = false; 310 ret = false; 321 else if (x->done != UINT_MAX) 311 else if (x->done != UINT_MAX) 322 x->done--; 312 x->done--; 323 raw_spin_unlock_irqrestore(&x->wait.lo 313 raw_spin_unlock_irqrestore(&x->wait.lock, flags); 324 return ret; 314 return ret; 325 } 315 } 326 EXPORT_SYMBOL(try_wait_for_completion); 316 EXPORT_SYMBOL(try_wait_for_completion); 327 317 328 /** 318 /** 329 * completion_done - Test to see if a com 319 * completion_done - Test to see if a completion has any waiters 330 * @x: completion structure 320 * @x: completion structure 331 * 321 * 332 * Return: 0 if there are waiters (wait_f 322 * Return: 0 if there are waiters (wait_for_completion() in progress) 333 * 1 if there are no waiters. 323 * 1 if there are no waiters. 334 * 324 * 335 * Note, this will always return true if 325 * Note, this will always return true if complete_all() was called on @X. 336 */ 326 */ 337 bool completion_done(struct completion *x) 327 bool completion_done(struct completion *x) 338 { 328 { 339 unsigned long flags; 329 unsigned long flags; 340 330 341 if (!READ_ONCE(x->done)) 331 if (!READ_ONCE(x->done)) 342 return false; 332 return false; 343 333 344 /* 334 /* 345 * If ->done, we need to wait for comp 335 * If ->done, we need to wait for complete() to release ->wait.lock 346 * otherwise we can end up freeing the 336 * otherwise we can end up freeing the completion before complete() 347 * is done referencing it. 337 * is done referencing it. 348 */ 338 */ 349 raw_spin_lock_irqsave(&x->wait.lock, f 339 raw_spin_lock_irqsave(&x->wait.lock, flags); 350 raw_spin_unlock_irqrestore(&x->wait.lo 340 raw_spin_unlock_irqrestore(&x->wait.lock, flags); 351 return true; 341 return true; 352 } 342 } 353 EXPORT_SYMBOL(completion_done); 343 EXPORT_SYMBOL(completion_done); 354 344
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.