]> Git Repo - linux.git/blobdiff - include/linux/completion.h
Merge branch 'linus' into locking/core, to resolve conflicts
[linux.git] / include / linux / completion.h
index 7828451e161aed19181a3b6cd6e210e6468cb190..0662a417febe34fb9e638857f13a6d52fcaf0d49 100644 (file)
@@ -50,15 +50,23 @@ static inline void complete_release_commit(struct completion *x)
        lock_commit_crosslock((struct lockdep_map *)&x->map);
 }
 
+#define init_completion_map(x, m)                                      \
+do {                                                                   \
+       lockdep_init_map_crosslock((struct lockdep_map *)&(x)->map,     \
+                       (m)->name, (m)->key, 0);                                \
+       __init_completion(x);                                           \
+} while (0)
+
 #define init_completion(x)                                             \
 do {                                                                   \
        static struct lock_class_key __key;                             \
        lockdep_init_map_crosslock((struct lockdep_map *)&(x)->map,     \
-                       "(complete)" #x,                                \
+                       "(completion)" #x,                              \
                        &__key, 0);                                     \
        __init_completion(x);                                           \
 } while (0)
 #else
+#define init_completion_map(x, m) __init_completion(x)
 #define init_completion(x) __init_completion(x)
 static inline void complete_acquire(struct completion *x) {}
 static inline void complete_release(struct completion *x) {}
@@ -68,12 +76,15 @@ static inline void complete_release_commit(struct completion *x) {}
 #ifdef CONFIG_LOCKDEP_COMPLETIONS
 #define COMPLETION_INITIALIZER(work) \
        { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait), \
-       STATIC_CROSS_LOCKDEP_MAP_INIT("(complete)" #work, &(work)) }
+       STATIC_CROSS_LOCKDEP_MAP_INIT("(completion)" #work, &(work)) }
 #else
 #define COMPLETION_INITIALIZER(work) \
        { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) }
 #endif
 
+#define COMPLETION_INITIALIZER_ONSTACK_MAP(work, map) \
+       (*({ init_completion_map(&(work), &(map)); &(work); }))
+
 #define COMPLETION_INITIALIZER_ONSTACK(work) \
        (*({ init_completion(&work); &work; }))
 
@@ -103,8 +114,11 @@ static inline void complete_release_commit(struct completion *x) {}
 #ifdef CONFIG_LOCKDEP
 # define DECLARE_COMPLETION_ONSTACK(work) \
        struct completion work = COMPLETION_INITIALIZER_ONSTACK(work)
+# define DECLARE_COMPLETION_ONSTACK_MAP(work, map) \
+       struct completion work = COMPLETION_INITIALIZER_ONSTACK_MAP(work, map)
 #else
 # define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work)
+# define DECLARE_COMPLETION_ONSTACK_MAP(work, map) DECLARE_COMPLETION(work)
 #endif
 
 /**
This page took 0.034401 seconds and 4 git commands to generate.