From: Kevin Diggs <kevdig@hypersurf.com>
To: linux-kernel@vger.kernel.org
Subject: Re: [Fwd: Corrections please ...]
Date: Tue, 19 Aug 2008 01:07:35 -0700 [thread overview]
Message-ID: <48AA7F47.5050805@hypersurf.com> (raw)
In-Reply-To: <20080819024125.GM19760@disturbed>
[-- Attachment #1: Type: text/plain, Size: 864 bytes --]
Dave Chinner wrote:
> On Mon, Aug 18, 2008 at 06:53:51PM -0700, Kevin Diggs wrote:
>
>>Could someone ... anyone take a look at these kernel doc additions?
>
> .....
>
>>+/**
>>+ * complete: - signals a single thread waiting on this completion
>>+ * @x: holds the state of this particular completion
>>+ *
>>+ * This will wake up a single thread waiting on this completion. If
>>multiple
>
>
> Your mailer appears to be wrapping lines.
>
>
>>+ * threads are waiting ???
>>+ */
>> void complete(struct completion *x)
>> {
>> unsigned long flags;
>
>
> complete() will only wake one waiting thread. If there are multiple
> waiters, then further calls to complete() are required to wake them,
> or a single call to complete_all() could be used.
>
>
>> EXPORT_SYMBOL(wait_for_completion);
>>
>>+/**
Take 2 ...
Files attached this time ...
kevin
[-- Attachment #2: completion.h.diff --]
[-- Type: text/plain, Size: 1160 bytes --]
--- include/linux/completion.h.orig 2008-08-13 00:56:52.000000000 -0700
+++ include/linux/completion.h 2008-08-18 13:00:23.000000000 -0700
@@ -10,6 +10,16 @@
#include <linux/wait.h>
+/**
+ * struct completion - structure used to maintain state for a "completion"
+ * @done: counting variable used to signal completion
+ * @wait: internal wait queue head; used for locking and synchronization
+ *
+ * This is the structure used to maintain the state for a "completion". See
+ * also: complete(), wait_for_completion() (and friends _timeout,
+ * _interruptible, _interruptible_timeout, and _killable), init_completion(),
+ * and macros DECLARE_COMPLETION() and INIT_COMPLETION().
+ */
struct completion {
unsigned int done;
wait_queue_head_t wait;
@@ -36,6 +46,13 @@
# define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work)
#endif
+/**
+ * init_completion: - Initialize a dynamically allocated completion
+ * @x: completion structure that is to be initialized
+ *
+ * This inline function will initialize a dynamically created completion
+ * structure.
+ */
static inline void init_completion(struct completion *x)
{
x->done = 0;
[-- Attachment #3: sched.c.diff --]
[-- Type: text/plain, Size: 3357 bytes --]
--- kernel/sched.c.orig 2008-08-13 02:22:42.000000000 -0700
+++ kernel/sched.c 2008-08-19 00:42:41.000000000 -0700
@@ -4363,6 +4363,16 @@
}
EXPORT_SYMBOL_GPL(__wake_up_sync); /* For internal use only */
+/**
+ * complete: - signals a single thread waiting on this completion
+ * @x: holds the state of this particular completion
+ *
+ * This will wake up a single thread waiting on this completion. If multiple
+ * threads are waiting ??? (looking for comments on which thread/context will
+ * be awakened?)
+ *
+ * See also complete_all().
+ */
void complete(struct completion *x)
{
unsigned long flags;
@@ -4374,6 +4384,12 @@
}
EXPORT_SYMBOL(complete);
+/**
+ * complete_all: - signals all threads waiting on this completion
+ * @x: holds the state of this particular completion
+ *
+ * This will wake up all threads waiting on this particular completion event.
+ */
void complete_all(struct completion *x)
{
unsigned long flags;
@@ -4425,12 +4441,28 @@
return timeout;
}
+/**
+ * wait_for_completion: - waits for completion of a task
+ * @x: holds the state of this particular completion
+ *
+ * This waits to be signaled for completion of a specific task. It is NOT
+ * interruptible and there is no timeout.
+ */
void __sched wait_for_completion(struct completion *x)
{
wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_UNINTERRUPTIBLE);
}
EXPORT_SYMBOL(wait_for_completion);
+/**
+ * wait_for_completion_timeout: - waits for completion of a task (w/timeout)
+ * @x: holds the state of this particular completion
+ * @timeout: timeout value in jiffies
+ *
+ * This waits for either a completion of a specific task to be signaled or for a
+ * specified timeout to expire. The timeout is in jiffies. It is not
+ * interruptible.
+ */
unsigned long __sched
wait_for_completion_timeout(struct completion *x, unsigned long timeout)
{
@@ -4438,6 +4470,13 @@
}
EXPORT_SYMBOL(wait_for_completion_timeout);
+/**
+ * wait_for_completion_interruptible: - waits for completion of a task (w/intr)
+ * @x: holds the state of this particular completion
+ *
+ * This waits for completion of a specific task to be signaled. It is
+ * interruptible.
+ */
int __sched wait_for_completion_interruptible(struct completion *x)
{
long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE);
@@ -4447,6 +4486,14 @@
}
EXPORT_SYMBOL(wait_for_completion_interruptible);
+/**
+ * wait_for_completion_interruptible_timeout: - waits for completion (w/(to,intr))
+ * @x: holds the state of this particular completion
+ * @timeout: timeout value in jiffies
+ *
+ * This waits for either a completion of a specific task to be signaled or for a
+ * specified timeout to expire. It is interruptible. The timeout is in jiffies.
+ */
unsigned long __sched
wait_for_completion_interruptible_timeout(struct completion *x,
unsigned long timeout)
@@ -4455,6 +4502,13 @@
}
EXPORT_SYMBOL(wait_for_completion_interruptible_timeout);
+/**
+ * wait_for_completion_killable: - waits for completion of a task (killable)
+ * @x: holds the state of this particular completion
+ *
+ * This waits to be signaled for completion of a specific task. It can be
+ * interrupted by a kill signal.
+ */
int __sched wait_for_completion_killable(struct completion *x)
{
long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_KILLABLE);
next prev parent reply other threads:[~2008-08-19 8:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-19 1:53 [Fwd: Corrections please ...] Kevin Diggs
2008-08-19 2:41 ` Dave Chinner
2008-08-19 8:07 ` Kevin Diggs [this message]
2008-08-19 12:03 ` Stefan Richter
2008-08-19 16:15 ` Marcin Slusarz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48AA7F47.5050805@hypersurf.com \
--to=kevdig@hypersurf.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox