projects/linux·commit 8b3db9c5

[PATCH] lockdep: add DECLARE_COMPLETION_ONSTACK() API

8b3db9c5 · Ingo Molnar <[email protected]> · 2006-07-03 00:24:28 -07:00

lockdep needs to have the waitqueue lock initialized for on-stack waitqueues
implicitly initialized by DECLARE_COMPLETION().  Introduce the API.

Signed-off-by: Ingo Molnar <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Commit
8b3db9c542e18b71d4820da4dd9401ee030feacb
Parents
d7e9629d

Changes

1 files changed · +12 −0

FileStatusAddDelContent
include/linux/completion.hmodified+12−0View file

include/linux/completion.h

View file
diff --git a/include/linux/completion.h b/include/linux/completion.h
index 90663ad..251c41e 100644
--- a/include/linux/completion.h
+++ b/include/linux/completion.h
@@ -21,6 +21,18 @@ struct completion {
#define DECLARE_COMPLETION(work) \
struct completion work = COMPLETION_INITIALIZER(work)
+/*
+ * Lockdep needs to run a non-constant initializer for on-stack
+ * completions - so we use the _ONSTACK() variant for those that
+ * are on the kernel stack:
+ */
+#ifdef CONFIG_LOCKDEP
+# define DECLARE_COMPLETION_ONSTACK(work) \
+ struct completion work = ({ init_completion(&work); work; })
+#else
+# define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work)
+#endif
+
static inline void init_completion(struct completion *x)
{
x->done = 0;