diff options
| author | Dave Chinner <david@fromorbit.com> | 2008-08-15 03:40:44 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-08-15 11:35:44 -0400 |
| commit | be4de35263f59ca1f4740edfffbfb02cc3f2189e (patch) | |
| tree | 7e560d01fdd56172b098e33b7c643de129e93b7b /include/linux | |
| parent | e48880e02e7e7ead9daa47fe3a20486f550668d3 (diff) | |
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 'include/linux')
| -rw-r--r-- | include/linux/completion.h | 46 |
1 files changed, 2 insertions, 44 deletions
diff --git a/include/linux/completion.h b/include/linux/completion.h index 57faa60de9bd..02ef8835999c 100644 --- a/include/linux/completion.h +++ b/include/linux/completion.h | |||
| @@ -49,6 +49,8 @@ extern unsigned long wait_for_completion_timeout(struct completion *x, | |||
| 49 | unsigned long timeout); | 49 | unsigned long timeout); |
| 50 | extern unsigned long wait_for_completion_interruptible_timeout( | 50 | extern unsigned long wait_for_completion_interruptible_timeout( |
| 51 | struct completion *x, unsigned long timeout); | 51 | struct completion *x, unsigned long timeout); |
| 52 | extern bool try_wait_for_completion(struct completion *x); | ||
| 53 | extern bool completion_done(struct completion *x); | ||
| 52 | 54 | ||
| 53 | extern void complete(struct completion *); | 55 | extern void complete(struct completion *); |
| 54 | extern void complete_all(struct completion *); | 56 | extern void complete_all(struct completion *); |
| @@ -56,48 +58,4 @@ extern void complete_all(struct completion *); | |||
| 56 | #define INIT_COMPLETION(x) ((x).done = 0) | 58 | #define INIT_COMPLETION(x) ((x).done = 0) |
| 57 | 59 | ||
| 58 | 60 | ||
| 59 | /** | ||
| 60 | * try_wait_for_completion - try to decrement a completion without blocking | ||
| 61 | * @x: completion structure | ||
| 62 | * | ||
| 63 | * Returns: 0 if a decrement cannot be done without blocking | ||
| 64 | * 1 if a decrement succeeded. | ||
| 65 | * | ||
| 66 | * If a completion is being used as a counting completion, | ||
| 67 | * attempt to decrement the counter without blocking. This | ||
| 68 | * enables us to avoid waiting if the resource the completion | ||
| 69 | * is protecting is not available. | ||
| 70 | */ | ||
| 71 | static inline bool try_wait_for_completion(struct completion *x) | ||
| 72 | { | ||
| 73 | int ret = 1; | ||
| 74 | |||
| 75 | spin_lock_irq(&x->wait.lock); | ||
| 76 | if (!x->done) | ||
| 77 | ret = 0; | ||
| 78 | else | ||
| 79 | x->done--; | ||
| 80 | spin_unlock_irq(&x->wait.lock); | ||
| 81 | return ret; | ||
| 82 | } | ||
| 83 | |||
| 84 | /** | ||
| 85 | * completion_done - Test to see if a completion has any waiters | ||
| 86 | * @x: completion structure | ||
| 87 | * | ||
| 88 | * Returns: 0 if there are waiters (wait_for_completion() in progress) | ||
| 89 | * 1 if there are no waiters. | ||
| 90 | * | ||
| 91 | */ | ||
| 92 | static inline bool completion_done(struct completion *x) | ||
| 93 | { | ||
| 94 | int ret = 1; | ||
| 95 | |||
| 96 | spin_lock_irq(&x->wait.lock); | ||
| 97 | if (!x->done) | ||
| 98 | ret = 0; | ||
| 99 | spin_unlock_irq(&x->wait.lock); | ||
| 100 | return ret; | ||
| 101 | } | ||
| 102 | |||
| 103 | #endif | 61 | #endif |
