From: Ingo Molnar Teach special (multi-initialized) locking code to the lock validator. Has no effect on non-lockdep kernels. Signed-off-by: Ingo Molnar Signed-off-by: Arjan van de Ven Signed-off-by: Andrew Morton --- include/linux/completion.h | 6 +----- kernel/sched.c | 8 ++++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff -puN include/linux/completion.h~lock-validator-special-locking-completions include/linux/completion.h --- devel/include/linux/completion.h~lock-validator-special-locking-completions 2006-05-29 18:13:16.000000000 -0700 +++ devel-akpm/include/linux/completion.h 2006-05-29 18:13:16.000000000 -0700 @@ -21,11 +21,7 @@ struct completion { #define DECLARE_COMPLETION(work) \ struct completion work = COMPLETION_INITIALIZER(work) -static inline void init_completion(struct completion *x) -{ - x->done = 0; - init_waitqueue_head(&x->wait); -} +extern void init_completion(struct completion *x); extern void FASTCALL(wait_for_completion(struct completion *)); extern int FASTCALL(wait_for_completion_interruptible(struct completion *x)); diff -puN kernel/sched.c~lock-validator-special-locking-completions kernel/sched.c --- devel/kernel/sched.c~lock-validator-special-locking-completions 2006-05-29 18:13:16.000000000 -0700 +++ devel-akpm/kernel/sched.c 2006-05-29 18:13:16.000000000 -0700 @@ -3542,6 +3542,14 @@ __wake_up_sync(wait_queue_head_t *q, uns } EXPORT_SYMBOL_GPL(__wake_up_sync); /* For internal use only */ +void init_completion(struct completion *x) +{ + x->done = 0; + __init_waitqueue_head(&x->wait); +} + +EXPORT_SYMBOL(init_completion); + void fastcall complete(struct completion *x) { unsigned long flags; _