diff options
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 */ |
