aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 29e2ec0bd831..93f5ea08be97 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4565,6 +4565,15 @@ __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr_exclusive)
4565} 4565}
4566EXPORT_SYMBOL_GPL(__wake_up_sync); /* For internal use only */ 4566EXPORT_SYMBOL_GPL(__wake_up_sync); /* For internal use only */
4567 4567
4568/**
4569 * complete: - signals a single thread waiting on this completion
4570 * @x: holds the state of this particular completion
4571 *
4572 * This will wake up a single thread waiting on this completion. Threads will be
4573 * awakened in the same order in which they were queued.
4574 *
4575 * See also complete_all(), wait_for_completion() and related routines.
4576 */
4568void complete(struct completion *x) 4577void complete(struct completion *x)
4569{ 4578{
4570 unsigned long flags; 4579 unsigned long flags;
@@ -4576,6 +4585,12 @@ void complete(struct completion *x)
4576} 4585}
4577EXPORT_SYMBOL(complete); 4586EXPORT_SYMBOL(complete);
4578 4587
4588/**
4589 * complete_all: - signals all threads waiting on this completion
4590 * @x: holds the state of this particular completion
4591 *
4592 * This will wake up all threads waiting on this particular completion event.
4593 */
4579void complete_all(struct completion *x) 4594void complete_all(struct completion *x)
4580{ 4595{
4581 unsigned long flags; 4596 unsigned long flags;
@@ -4624,12 +4639,31 @@ wait_for_common(struct completion *x, long timeout, int state)
4624 return timeout; 4639 return timeout;
4625} 4640}
4626 4641
4642/**
4643 * wait_for_completion: - waits for completion of a task
4644 * @x: holds the state of this particular completion
4645 *
4646 * This waits to be signaled for completion of a specific task. It is NOT
4647 * interruptible and there is no timeout.
4648 *
4649 * See also similar routines (i.e. wait_for_completion_timeout()) with timeout
4650 * and interrupt capability. Also see complete().
4651 */
4627void __sched wait_for_completion(struct completion *x) 4652void __sched wait_for_completion(struct completion *x)
4628{ 4653{
4629 wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_UNINTERRUPTIBLE); 4654 wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_UNINTERRUPTIBLE);
4630} 4655}
4631EXPORT_SYMBOL(wait_for_completion); 4656EXPORT_SYMBOL(wait_for_completion);
4632 4657
4658/**
4659 * wait_for_completion_timeout: - waits for completion of a task (w/timeout)
4660 * @x: holds the state of this particular completion
4661 * @timeout: timeout value in jiffies
4662 *
4663 * This waits for either a completion of a specific task to be signaled or for a
4664 * specified timeout to expire. The timeout is in jiffies. It is not
4665 * interruptible.
4666 */
4633unsigned long __sched 4667unsigned long __sched
4634wait_for_completion_timeout(struct completion *x, unsigned long timeout) 4668wait_for_completion_timeout(struct completion *x, unsigned long timeout)
4635{ 4669{
@@ -4637,6 +4671,13 @@ wait_for_completion_timeout(struct completion *x, unsigned long timeout)
4637} 4671}
4638EXPORT_SYMBOL(wait_for_completion_timeout); 4672EXPORT_SYMBOL(wait_for_completion_timeout);
4639 4673
4674/**
4675 * wait_for_completion_interruptible: - waits for completion of a task (w/intr)
4676 * @x: holds the state of this particular completion
4677 *
4678 * This waits for completion of a specific task to be signaled. It is
4679 * interruptible.
4680 */
4640int __sched wait_for_completion_interruptible(struct completion *x) 4681int __sched wait_for_completion_interruptible(struct completion *x)
4641{ 4682{
4642 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE); 4683 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE);
@@ -4646,6 +4687,14 @@ int __sched wait_for_completion_interruptible(struct completion *x)
4646} 4687}
4647EXPORT_SYMBOL(wait_for_completion_interruptible); 4688EXPORT_SYMBOL(wait_for_completion_interruptible);
4648 4689
4690/**
4691 * wait_for_completion_interruptible_timeout: - waits for completion (w/(to,intr))
4692 * @x: holds the state of this particular completion
4693 * @timeout: timeout value in jiffies
4694 *
4695 * This waits for either a completion of a specific task to be signaled or for a
4696 * specified timeout to expire. It is interruptible. The timeout is in jiffies.
4697 */
4649unsigned long __sched 4698unsigned long __sched
4650wait_for_completion_interruptible_timeout(struct completion *x, 4699wait_for_completion_interruptible_timeout(struct completion *x,
4651 unsigned long timeout) 4700 unsigned long timeout)
@@ -4654,6 +4703,13 @@ wait_for_completion_interruptible_timeout(struct completion *x,
4654} 4703}
4655EXPORT_SYMBOL(wait_for_completion_interruptible_timeout); 4704EXPORT_SYMBOL(wait_for_completion_interruptible_timeout);
4656 4705
4706/**
4707 * wait_for_completion_killable: - waits for completion of a task (killable)
4708 * @x: holds the state of this particular completion
4709 *
4710 * This waits to be signaled for completion of a specific task. It can be
4711 * interrupted by a kill signal.
4712 */
4657int __sched wait_for_completion_killable(struct completion *x) 4713int __sched wait_for_completion_killable(struct completion *x)
4658{ 4714{
4659 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_KILLABLE); 4715 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_KILLABLE);