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