Commit be4de35263f59ca1f4740edfffbfb02cc3f2189e

Authored by Dave Chinner
Committed by Linus Torvalds
1 parent e48880e02e

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>

Showing 2 changed files with 48 additions and 44 deletions Side-by-side Diff

include/linux/completion.h
... ... @@ -49,56 +49,14 @@
49 49 unsigned long timeout);
50 50 extern unsigned long wait_for_completion_interruptible_timeout(
51 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 55 extern void complete(struct completion *);
54 56 extern void complete_all(struct completion *);
55 57  
56 58 #define INIT_COMPLETION(x) ((x).done = 0)
57 59  
58   -
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 60  
103 61 #endif
... ... @@ -4669,6 +4669,52 @@
4669 4669 }
4670 4670 EXPORT_SYMBOL(wait_for_completion_killable);
4671 4671  
  4672 +/**
  4673 + * try_wait_for_completion - try to decrement a completion without blocking
  4674 + * @x: completion structure
  4675 + *
  4676 + * Returns: 0 if a decrement cannot be done without blocking
  4677 + * 1 if a decrement succeeded.
  4678 + *
  4679 + * If a completion is being used as a counting completion,
  4680 + * attempt to decrement the counter without blocking. This
  4681 + * enables us to avoid waiting if the resource the completion
  4682 + * is protecting is not available.
  4683 + */
  4684 +bool try_wait_for_completion(struct completion *x)
  4685 +{
  4686 + int ret = 1;
  4687 +
  4688 + spin_lock_irq(&x->wait.lock);
  4689 + if (!x->done)
  4690 + ret = 0;
  4691 + else
  4692 + x->done--;
  4693 + spin_unlock_irq(&x->wait.lock);
  4694 + return ret;
  4695 +}
  4696 +EXPORT_SYMBOL(try_wait_for_completion);
  4697 +
  4698 +/**
  4699 + * completion_done - Test to see if a completion has any waiters
  4700 + * @x: completion structure
  4701 + *
  4702 + * Returns: 0 if there are waiters (wait_for_completion() in progress)
  4703 + * 1 if there are no waiters.
  4704 + *
  4705 + */
  4706 +bool completion_done(struct completion *x)
  4707 +{
  4708 + int ret = 1;
  4709 +
  4710 + spin_lock_irq(&x->wait.lock);
  4711 + if (!x->done)
  4712 + ret = 0;
  4713 + spin_unlock_irq(&x->wait.lock);
  4714 + return ret;
  4715 +}
  4716 +EXPORT_SYMBOL(completion_done);
  4717 +
4672 4718 static long __sched
4673 4719 sleep_on_common(wait_queue_head_t *q, int state, long timeout)
4674 4720 {