diff --git a/[refs] b/[refs] index df8e48cb5636..428012b86504 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d7e9629de051bb4b1d104588cd97673ad770809e +refs/heads/master: 8b3db9c542e18b71d4820da4dd9401ee030feacb diff --git a/trunk/include/linux/completion.h b/trunk/include/linux/completion.h index 90663ad217f9..251c41e3ddd5 100644 --- a/trunk/include/linux/completion.h +++ b/trunk/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;