diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/sched.c | 56 |
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 | } |
4566 | EXPORT_SYMBOL_GPL(__wake_up_sync); /* For internal use only */ | 4566 | EXPORT_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 | */ | ||
4568 | void complete(struct completion *x) | 4577 | void 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 | } |
4577 | EXPORT_SYMBOL(complete); | 4586 | EXPORT_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 | */ | ||
4579 | void complete_all(struct completion *x) | 4594 | void 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 | */ | ||
4627 | void __sched wait_for_completion(struct completion *x) | 4652 | void __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 | } |
4631 | EXPORT_SYMBOL(wait_for_completion); | 4656 | EXPORT_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 | */ | ||
4633 | unsigned long __sched | 4667 | unsigned long __sched |
4634 | wait_for_completion_timeout(struct completion *x, unsigned long timeout) | 4668 | wait_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 | } |
4638 | EXPORT_SYMBOL(wait_for_completion_timeout); | 4672 | EXPORT_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 | */ | ||
4640 | int __sched wait_for_completion_interruptible(struct completion *x) | 4681 | int __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 | } |
4647 | EXPORT_SYMBOL(wait_for_completion_interruptible); | 4688 | EXPORT_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 | */ | ||
4649 | unsigned long __sched | 4698 | unsigned long __sched |
4650 | wait_for_completion_interruptible_timeout(struct completion *x, | 4699 | wait_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 | } |
4655 | EXPORT_SYMBOL(wait_for_completion_interruptible_timeout); | 4704 | EXPORT_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 | */ | ||
4657 | int __sched wait_for_completion_killable(struct completion *x) | 4713 | int __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); |