diff options
author | Tejun Heo <tj@kernel.org> | 2010-06-29 04:07:10 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2010-06-29 04:07:10 -0400 |
commit | 22df02bb3fab24af97bff4c69cc6fd8529fc66fe (patch) | |
tree | 125b00589e5abe4dc941a1dba467cd50563ad195 /include/linux/workqueue.h | |
parent | 97e37d7b9e65a6ac939f796f91081135b7a08acc (diff) |
workqueue: define masks for work flags and conditionalize STATIC flags
Work flags are about to see more traditional mask handling. Define
WORK_STRUCT_*_BIT as the bit position constant and redefine
WORK_STRUCT_* as bit masks. Also, make WORK_STRUCT_STATIC_* flags
conditional
While at it, re-define these constants as enums and use
WORK_STRUCT_STATIC instead of hard-coding 2 in
WORK_DATA_STATIC_INIT().
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'include/linux/workqueue.h')
-rw-r--r-- | include/linux/workqueue.h | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index d89cfc143b1a..d60c5701ab45 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
@@ -22,12 +22,25 @@ typedef void (*work_func_t)(struct work_struct *work); | |||
22 | */ | 22 | */ |
23 | #define work_data_bits(work) ((unsigned long *)(&(work)->data)) | 23 | #define work_data_bits(work) ((unsigned long *)(&(work)->data)) |
24 | 24 | ||
25 | enum { | ||
26 | WORK_STRUCT_PENDING_BIT = 0, /* work item is pending execution */ | ||
27 | #ifdef CONFIG_DEBUG_OBJECTS_WORK | ||
28 | WORK_STRUCT_STATIC_BIT = 1, /* static initializer (debugobjects) */ | ||
29 | #endif | ||
30 | |||
31 | WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT, | ||
32 | #ifdef CONFIG_DEBUG_OBJECTS_WORK | ||
33 | WORK_STRUCT_STATIC = 1 << WORK_STRUCT_STATIC_BIT, | ||
34 | #else | ||
35 | WORK_STRUCT_STATIC = 0, | ||
36 | #endif | ||
37 | |||
38 | WORK_STRUCT_FLAG_MASK = 3UL, | ||
39 | WORK_STRUCT_WQ_DATA_MASK = ~WORK_STRUCT_FLAG_MASK, | ||
40 | }; | ||
41 | |||
25 | struct work_struct { | 42 | struct work_struct { |
26 | atomic_long_t data; | 43 | atomic_long_t data; |
27 | #define WORK_STRUCT_PENDING 0 /* T if work item pending execution */ | ||
28 | #define WORK_STRUCT_STATIC 1 /* static initializer (debugobjects) */ | ||
29 | #define WORK_STRUCT_FLAG_MASK (3UL) | ||
30 | #define WORK_STRUCT_WQ_DATA_MASK (~WORK_STRUCT_FLAG_MASK) | ||
31 | struct list_head entry; | 44 | struct list_head entry; |
32 | work_func_t func; | 45 | work_func_t func; |
33 | #ifdef CONFIG_LOCKDEP | 46 | #ifdef CONFIG_LOCKDEP |
@@ -36,7 +49,7 @@ struct work_struct { | |||
36 | }; | 49 | }; |
37 | 50 | ||
38 | #define WORK_DATA_INIT() ATOMIC_LONG_INIT(0) | 51 | #define WORK_DATA_INIT() ATOMIC_LONG_INIT(0) |
39 | #define WORK_DATA_STATIC_INIT() ATOMIC_LONG_INIT(2) | 52 | #define WORK_DATA_STATIC_INIT() ATOMIC_LONG_INIT(WORK_STRUCT_STATIC) |
40 | 53 | ||
41 | struct delayed_work { | 54 | struct delayed_work { |
42 | struct work_struct work; | 55 | struct work_struct work; |
@@ -98,7 +111,7 @@ extern void __init_work(struct work_struct *work, int onstack); | |||
98 | extern void destroy_work_on_stack(struct work_struct *work); | 111 | extern void destroy_work_on_stack(struct work_struct *work); |
99 | static inline unsigned int work_static(struct work_struct *work) | 112 | static inline unsigned int work_static(struct work_struct *work) |
100 | { | 113 | { |
101 | return *work_data_bits(work) & (1 << WORK_STRUCT_STATIC); | 114 | return *work_data_bits(work) & WORK_STRUCT_STATIC; |
102 | } | 115 | } |
103 | #else | 116 | #else |
104 | static inline void __init_work(struct work_struct *work, int onstack) { } | 117 | static inline void __init_work(struct work_struct *work, int onstack) { } |
@@ -167,7 +180,7 @@ static inline unsigned int work_static(struct work_struct *work) { return 0; } | |||
167 | * @work: The work item in question | 180 | * @work: The work item in question |
168 | */ | 181 | */ |
169 | #define work_pending(work) \ | 182 | #define work_pending(work) \ |
170 | test_bit(WORK_STRUCT_PENDING, work_data_bits(work)) | 183 | test_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)) |
171 | 184 | ||
172 | /** | 185 | /** |
173 | * delayed_work_pending - Find out whether a delayable work item is currently | 186 | * delayed_work_pending - Find out whether a delayable work item is currently |
@@ -182,7 +195,7 @@ static inline unsigned int work_static(struct work_struct *work) { return 0; } | |||
182 | * @work: The work item in question | 195 | * @work: The work item in question |
183 | */ | 196 | */ |
184 | #define work_clear_pending(work) \ | 197 | #define work_clear_pending(work) \ |
185 | clear_bit(WORK_STRUCT_PENDING, work_data_bits(work)) | 198 | clear_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work)) |
186 | 199 | ||
187 | enum { | 200 | enum { |
188 | WQ_FREEZEABLE = 1 << 0, /* freeze during suspend */ | 201 | WQ_FREEZEABLE = 1 << 0, /* freeze during suspend */ |