History

sched: add kernel doc for the completion, fix kernel-doc-nano-HOWTO.txt

This patch adds kernel doc for the completion feature. An error in the split-man.pl PERL snippet in kernel-doc-nano-HOWTO.txt is also fixed.

Kevin Diggs committed 18 years ago

Commit 65eb3dc1 parent 3cf430b3 files · +99 −2Browse files

Unified · Split

3 files
  1. Documentation/kernel-doc-nano-HOWTO.txt +2 −2
  2. include/linux/completion.h +41 −0
  3. kernel/sched.c +56 −0
Documentation/kernel-doc-nano-HOWTO.txt+2−2
@@ -168,10 +168,10 @@ if ($#ARGV < 0) { · 167 unmodified lines
168168 mkdir $ARGV[0],0777;
169169 $state = 0;
170170 while (<STDIN>) {
171− if (/^\.TH \"[^\"]*\" 4 \"([^\"]*)\"/) {
171+ if (/^\.TH \"[^\"]*\" 9 \"([^\"]*)\"/) {
172172 if ($state == 1) { close OUT }
173173 $state = 1;
174− $fn = "$ARGV[0]/$1.4";
174+ $fn = "$ARGV[0]/$1.9";
175175 print STDERR "Creating $fn\n";
176176 open OUT, ">$fn" or die "can't open $fn: $!\n";
177177 print OUT $_;
include/linux/completion.h+41−0
@@ -10,6 +10,18 @@ · 9 unmodified lines
1010
1111 #include <linux/wait.h>
1212
13+/**
14+ * struct completion - structure used to maintain state for a "completion"
15+ *
16+ * This is the opaque structure used to maintain the state for a "completion".
17+ * Completions currently use a FIFO to queue threads that have to wait for
18+ * the "completion" event.
19+ *
20+ * See also: complete(), wait_for_completion() (and friends _timeout,
21+ * _interruptible, _interruptible_timeout, and _killable), init_completion(),
22+ * and macros DECLARE_COMPLETION(), DECLARE_COMPLETION_ONSTACK(), and
23+ * INIT_COMPLETION().
24+ */
1325 struct completion {
1426 unsigned int done;
1527 wait_queue_head_t wait;
@@ -21,6 +33,14 @@ struct completion { · 5 unmodified lines
2133 #define COMPLETION_INITIALIZER_ONSTACK(work) \
2234 ({ init_completion(&work); work; })
2335
36+/**
37+ * DECLARE_COMPLETION: - declare and initialize a completion structure
38+ * @work: identifier for the completion structure
39+ *
40+ * This macro declares and initializes a completion structure. Generally used
41+ * for static declarations. You should use the _ONSTACK variant for automatic
42+ * variables.
43+ */
2444 #define DECLARE_COMPLETION(work) \
2545 struct completion work = COMPLETION_INITIALIZER(work)
2646
@@ -29,6 +49,13 @@ struct completion { · 2 unmodified lines
2949 * completions - so we use the _ONSTACK() variant for those that
3050 * are on the kernel stack:
3151 */
52+/**
53+ * DECLARE_COMPLETION_ONSTACK: - declare and initialize a completion structure
54+ * @work: identifier for the completion structure
55+ *
56+ * This macro declares and initializes a completion structure on the kernel
57+ * stack.
58+ */
3259 #ifdef CONFIG_LOCKDEP
3360 # define DECLARE_COMPLETION_ONSTACK(work) \
3461 struct completion work = COMPLETION_INITIALIZER_ONSTACK(work)
@@ -36,6 +63,13 @@ struct completion { · 1 unmodified line
3663 # define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work)
3764 #endif
3865
66+/**
67+ * init_completion: - Initialize a dynamically allocated completion
68+ * @x: completion structure that is to be initialized
69+ *
70+ * This inline function will initialize a dynamically created completion
71+ * structure.
72+ */
3973 static inline void init_completion(struct completion *x)
4074 {
4175 x->done = 0;
@@ -55,6 +89,13 @@ extern bool completion_done(struct completion *x); · 13 unmodified lines
5589 extern void complete(struct completion *);
5690 extern void complete_all(struct completion *);
5791
92+/**
93+ * INIT_COMPLETION: - reinitialize a completion structure
94+ * @x: completion structure to be reinitialized
95+ *
96+ * This macro should be used to reinitialize a completion structure so it can
97+ * be reused. This is especially important after complete_all() is used.
98+ */
5899 #define INIT_COMPLETION(x) ((x).done = 0)
59100
60101
kernel/sched.c+56−0
@@ -4565,6 +4565,15 @@ __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr_exclusive) · 4564 unmodified lines
45654565 }
45664566 EXPORT_SYMBOL_GPL(__wake_up_sync); /* For internal use only */
45674567
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+ */
45684577 void complete(struct completion *x)
45694578 {
45704579 unsigned long flags;
@@ -4576,6 +4585,12 @@ void complete(struct completion *x) · 5 unmodified lines
45764585 }
45774586 EXPORT_SYMBOL(complete);
45784587
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+ */
45794594 void complete_all(struct completion *x)
45804595 {
45814596 unsigned long flags;
@@ -4624,12 +4639,31 @@ wait_for_common(struct completion *x, long timeout, int state) · 42 unmodified lines
46244639 return timeout;
46254640 }
46264641
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+ */
46274652 void __sched wait_for_completion(struct completion *x)
46284653 {
46294654 wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_UNINTERRUPTIBLE);
46304655 }
46314656 EXPORT_SYMBOL(wait_for_completion);
46324657
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+ */
46334667 unsigned long __sched
46344668 wait_for_completion_timeout(struct completion *x, unsigned long timeout)
46354669 {
@@ -4637,6 +4671,13 @@ wait_for_completion_timeout(struct completion *x, unsigned long timeout) · 1 unmodified line
46374671 }
46384672 EXPORT_SYMBOL(wait_for_completion_timeout);
46394673
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+ */
46404681 int __sched wait_for_completion_interruptible(struct completion *x)
46414682 {
46424683 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE);
@@ -4646,6 +4687,14 @@ int __sched wait_for_completion_interruptible(struct completion *x) · 3 unmodified lines
46464687 }
46474688 EXPORT_SYMBOL(wait_for_completion_interruptible);
46484689
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+ */
46494698 unsigned long __sched
46504699 wait_for_completion_interruptible_timeout(struct completion *x,
46514700 unsigned long timeout)
@@ -4654,6 +4703,13 @@ wait_for_completion_interruptible_timeout(struct completion *x, · 2 unmodified lines
46544703 }
46554704 EXPORT_SYMBOL(wait_for_completion_interruptible_timeout);
46564705
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+ */
46574713 int __sched wait_for_completion_killable(struct completion *x)
46584714 {
46594715 long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_KILLABLE);