Version:  2.6.32 2.6.33 2.6.34 2.6.35 2.6.36 2.6.37 2.6.38 2.6.39 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9

Architecture:  x86 arm avr32 blackfin m68k m68knommu microblaze mips powerpc sh

Linux/include/linux/completion.h

  1 #ifndef __LINUX_COMPLETION_H
  2 #define __LINUX_COMPLETION_H
  3 
  4 /*
  5  * (C) Copyright 2001 Linus Torvalds
  6  *
  7  * Atomic wait-for-completion handler data structures.
  8  * See kernel/sched.c for details.
  9  */
 10 
 11 #include <linux/wait.h>
 12 
 13 /*
 14  * struct completion - structure used to maintain state for a "completion"
 15  *
 16  * This is the opaque structure used to maintain the state for a "completion".
 17  * Completions currently use a FIFO to queue threads that have to wait for
 18  * the "completion" event.
 19  *
 20  * See also:  complete(), wait_for_completion() (and friends _timeout,
 21  * _interruptible, _interruptible_timeout, and _killable), init_completion(),
 22  * and macros DECLARE_COMPLETION(), DECLARE_COMPLETION_ONSTACK(), and
 23  * INIT_COMPLETION().
 24  */
 25 struct completion {
 26         unsigned int done;
 27         wait_queue_head_t wait;
 28 };
 29 
 30 #define COMPLETION_INITIALIZER(work) \
 31         { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) }
 32 
 33 #define COMPLETION_INITIALIZER_ONSTACK(work) \
 34         ({ init_completion(&work); work; })
 35 
 36 /**
 37  * DECLARE_COMPLETION - declare and initialize a completion structure
 38  * @work:  identifier for the completion structure
 39  *
 40  * This macro declares and initializes a completion structure. Generally used
 41  * for static declarations. You should use the _ONSTACK variant for automatic
 42  * variables.
 43  */
 44 #define DECLARE_COMPLETION(work) \
 45         struct completion work = COMPLETION_INITIALIZER(work)
 46 
 47 /*
 48  * Lockdep needs to run a non-constant initializer for on-stack
 49  * completions - so we use the _ONSTACK() variant for those that
 50  * are on the kernel stack:
 51  */
 52 /**
 53  * DECLARE_COMPLETION_ONSTACK - declare and initialize a completion structure
 54  * @work:  identifier for the completion structure
 55  *
 56  * This macro declares and initializes a completion structure on the kernel
 57  * stack.
 58  */
 59 #ifdef CONFIG_LOCKDEP
 60 # define DECLARE_COMPLETION_ONSTACK(work) \
 61         struct completion work = COMPLETION_INITIALIZER_ONSTACK(work)
 62 #else
 63 # define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work)
 64 #endif
 65 
 66 /**
 67  * init_completion - Initialize a dynamically allocated completion
 68  * @x:  completion structure that is to be initialized
 69  *
 70  * This inline function will initialize a dynamically created completion
 71  * structure.
 72  */
 73 static inline void init_completion(struct completion *x)
 74 {
 75         x->done = 0;
 76         init_waitqueue_head(&x->wait);
 77 }
 78 
 79 extern void wait_for_completion(struct completion *);
 80 extern void wait_for_completion_io(struct completion *);
 81 extern int wait_for_completion_interruptible(struct completion *x);
 82 extern int wait_for_completion_killable(struct completion *x);
 83 extern unsigned long wait_for_completion_timeout(struct completion *x,
 84                                                    unsigned long timeout);
 85 extern unsigned long wait_for_completion_io_timeout(struct completion *x,
 86                                                     unsigned long timeout);
 87 extern long wait_for_completion_interruptible_timeout(
 88         struct completion *x, unsigned long timeout);
 89 extern long wait_for_completion_killable_timeout(
 90         struct completion *x, unsigned long timeout);
 91 extern bool try_wait_for_completion(struct completion *x);
 92 extern bool completion_done(struct completion *x);
 93 
 94 extern void complete(struct completion *);
 95 extern void complete_all(struct completion *);
 96 
 97 /**
 98  * INIT_COMPLETION - reinitialize a completion structure
 99  * @x:  completion structure to be reinitialized
100  *
101  * This macro should be used to reinitialize a completion structure so it can
102  * be reused. This is especially important after complete_all() is used.
103  */
104 #define INIT_COMPLETION(x)      ((x).done = 0)
105 
106 
107 #endif
108 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds