mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
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>
This commit is contained in:
parent
e48880e02e
commit
be4de35263
2 changed files with 48 additions and 44 deletions
|
@ -49,6 +49,8 @@ extern unsigned long wait_for_completion_timeout(struct completion *x,
|
||||||
unsigned long timeout);
|
unsigned long timeout);
|
||||||
extern unsigned long wait_for_completion_interruptible_timeout(
|
extern unsigned long wait_for_completion_interruptible_timeout(
|
||||||
struct completion *x, unsigned long timeout);
|
struct completion *x, unsigned long timeout);
|
||||||
|
extern bool try_wait_for_completion(struct completion *x);
|
||||||
|
extern bool completion_done(struct completion *x);
|
||||||
|
|
||||||
extern void complete(struct completion *);
|
extern void complete(struct completion *);
|
||||||
extern void complete_all(struct completion *);
|
extern void complete_all(struct completion *);
|
||||||
|
@ -56,48 +58,4 @@ extern void complete_all(struct completion *);
|
||||||
#define INIT_COMPLETION(x) ((x).done = 0)
|
#define INIT_COMPLETION(x) ((x).done = 0)
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
static inline 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static inline 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4669,6 +4669,52 @@ int __sched wait_for_completion_killable(struct completion *x)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(wait_for_completion_killable);
|
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
|
static long __sched
|
||||||
sleep_on_common(wait_queue_head_t *q, int state, long timeout)
|
sleep_on_common(wait_queue_head_t *q, int state, long timeout)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue