diff options
| author | Dave Chinner <david@fromorbit.com> | 2008-08-15 00:40:44 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-15 08:35:44 -0700 | 
| commit | be4de35263f59ca1f4740edfffbfb02cc3f2189e (patch) | |
| tree | 7e560d01fdd56172b098e33b7c643de129e93b7b /kernel/sched.c | |
| parent | e48880e02e7e7ead9daa47fe3a20486f550668d3 (diff) | |
| download | olio-linux-3.10-be4de35263f59ca1f4740edfffbfb02cc3f2189e.tar.xz olio-linux-3.10-be4de35263f59ca1f4740edfffbfb02cc3f2189e.zip  | |
completions: uninline try_wait_for_completion and completion_done
m68k fails to build with these functions inlined in completion.h.  Move
them out of line into sched.c and export them to avoid this problem.
Signed-off-by: Dave Chinner <david@fromorbit.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/sched.c')
| -rw-r--r-- | kernel/sched.c | 46 | 
1 files changed, 46 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index d601fb0406c..95e6ad3c231 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -4669,6 +4669,52 @@ int __sched wait_for_completion_killable(struct completion *x)  }  EXPORT_SYMBOL(wait_for_completion_killable); +/** + *	try_wait_for_completion - try to decrement a completion without blocking + *	@x:	completion structure + * + *	Returns: 0 if a decrement cannot be done without blocking + *		 1 if a decrement succeeded. + * + *	If a completion is being used as a counting completion, + *	attempt to decrement the counter without blocking. This + *	enables us to avoid waiting if the resource the completion + *	is protecting is not available. + */ +bool try_wait_for_completion(struct completion *x) +{ +	int ret = 1; + +	spin_lock_irq(&x->wait.lock); +	if (!x->done) +		ret = 0; +	else +		x->done--; +	spin_unlock_irq(&x->wait.lock); +	return ret; +} +EXPORT_SYMBOL(try_wait_for_completion); + +/** + *	completion_done - Test to see if a completion has any waiters + *	@x:	completion structure + * + *	Returns: 0 if there are waiters (wait_for_completion() in progress) + *		 1 if there are no waiters. + * + */ +bool completion_done(struct completion *x) +{ +	int ret = 1; + +	spin_lock_irq(&x->wait.lock); +	if (!x->done) +		ret = 0; +	spin_unlock_irq(&x->wait.lock); +	return ret; +} +EXPORT_SYMBOL(completion_done); +  static long __sched  sleep_on_common(wait_queue_head_t *q, int state, long timeout)  {  |