Blame view
include/linux/completion.h
3.23 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 |
#ifndef __LINUX_COMPLETION_H #define __LINUX_COMPLETION_H /* * (C) Copyright 2001 Linus Torvalds * * Atomic wait-for-completion handler data structures. * See kernel/sched.c for details. */ #include <linux/wait.h> |
ee2f154a5 docbook: add more... |
12 |
/* |
65eb3dc60 sched: add kernel... |
13 14 15 16 17 18 19 20 21 22 23 |
* struct completion - structure used to maintain state for a "completion" * * This is the opaque structure used to maintain the state for a "completion". * Completions currently use a FIFO to queue threads that have to wait for * the "completion" event. * * See also: complete(), wait_for_completion() (and friends _timeout, * _interruptible, _interruptible_timeout, and _killable), init_completion(), * and macros DECLARE_COMPLETION(), DECLARE_COMPLETION_ONSTACK(), and * INIT_COMPLETION(). */ |
1da177e4c Linux-2.6.12-rc2 |
24 25 26 27 28 29 30 |
struct completion { unsigned int done; wait_queue_head_t wait; }; #define COMPLETION_INITIALIZER(work) \ { 0, __WAIT_QUEUE_HEAD_INITIALIZER((work).wait) } |
f86bf9b7b [PATCH] lockdep: ... |
31 32 |
#define COMPLETION_INITIALIZER_ONSTACK(work) \ ({ init_completion(&work); work; }) |
65eb3dc60 sched: add kernel... |
33 |
/** |
ee2f154a5 docbook: add more... |
34 |
* DECLARE_COMPLETION - declare and initialize a completion structure |
65eb3dc60 sched: add kernel... |
35 36 37 38 39 40 |
* @work: identifier for the completion structure * * This macro declares and initializes a completion structure. Generally used * for static declarations. You should use the _ONSTACK variant for automatic * variables. */ |
1da177e4c Linux-2.6.12-rc2 |
41 42 |
#define DECLARE_COMPLETION(work) \ struct completion work = COMPLETION_INITIALIZER(work) |
8b3db9c54 [PATCH] lockdep: ... |
43 44 45 46 47 |
/* * 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: */ |
65eb3dc60 sched: add kernel... |
48 |
/** |
ee2f154a5 docbook: add more... |
49 |
* DECLARE_COMPLETION_ONSTACK - declare and initialize a completion structure |
65eb3dc60 sched: add kernel... |
50 51 52 53 54 |
* @work: identifier for the completion structure * * This macro declares and initializes a completion structure on the kernel * stack. */ |
8b3db9c54 [PATCH] lockdep: ... |
55 56 |
#ifdef CONFIG_LOCKDEP # define DECLARE_COMPLETION_ONSTACK(work) \ |
f86bf9b7b [PATCH] lockdep: ... |
57 |
struct completion work = COMPLETION_INITIALIZER_ONSTACK(work) |
8b3db9c54 [PATCH] lockdep: ... |
58 59 60 |
#else # define DECLARE_COMPLETION_ONSTACK(work) DECLARE_COMPLETION(work) #endif |
65eb3dc60 sched: add kernel... |
61 |
/** |
ee2f154a5 docbook: add more... |
62 |
* init_completion - Initialize a dynamically allocated completion |
65eb3dc60 sched: add kernel... |
63 64 65 66 67 |
* @x: completion structure that is to be initialized * * This inline function will initialize a dynamically created completion * structure. */ |
1da177e4c Linux-2.6.12-rc2 |
68 69 70 71 72 |
static inline void init_completion(struct completion *x) { x->done = 0; init_waitqueue_head(&x->wait); } |
b15136e94 sched: fix fastca... |
73 74 |
extern void wait_for_completion(struct completion *); extern int wait_for_completion_interruptible(struct completion *x); |
009e577e0 Add wait_for_comp... |
75 |
extern int wait_for_completion_killable(struct completion *x); |
b15136e94 sched: fix fastca... |
76 77 |
extern unsigned long wait_for_completion_timeout(struct completion *x, unsigned long timeout); |
6bf412376 sched: Change wai... |
78 79 80 81 |
extern long wait_for_completion_interruptible_timeout( struct completion *x, unsigned long timeout); extern long wait_for_completion_killable_timeout( struct completion *x, unsigned long timeout); |
be4de3526 completions: unin... |
82 83 |
extern bool try_wait_for_completion(struct completion *x); extern bool completion_done(struct completion *x); |
b15136e94 sched: fix fastca... |
84 85 86 |
extern void complete(struct completion *); extern void complete_all(struct completion *); |
1da177e4c Linux-2.6.12-rc2 |
87 |
|
65eb3dc60 sched: add kernel... |
88 |
/** |
ee2f154a5 docbook: add more... |
89 |
* INIT_COMPLETION - reinitialize a completion structure |
65eb3dc60 sched: add kernel... |
90 91 92 93 94 |
* @x: completion structure to be reinitialized * * This macro should be used to reinitialize a completion structure so it can * be reused. This is especially important after complete_all() is used. */ |
1da177e4c Linux-2.6.12-rc2 |
95 |
#define INIT_COMPLETION(x) ((x).done = 0) |
39d2f1ab2 [XFS] extend comp... |
96 |
|
1da177e4c Linux-2.6.12-rc2 |
97 |
#endif |