A work is linked to the next one by having WORK_STRUCT_LINKED bit set and these links can be chained. When a linked work is dispatched to a worker, all linked works are dispatched to the worker's newly added ->scheduled queue and processed back-to-back. Currently, as there's only single worker per cwq, having linked works doesn't make any visible behavior difference. This change is to prepare for multiple shared workers per cpu.
Showing the changes to include (1 of 2 files). Show all
Unified · Split
| @@ -24,8 +24,9 @@ typedef void (*work_func_t)(struct work_struct *work); · 23 unmodified lines | |||
| 24 | 24 | ||
| 25 | enum { | 25 | enum { |
| 26 | WORK_STRUCT_PENDING_BIT = 0, /* work item is pending execution */ | 26 | WORK_STRUCT_PENDING_BIT = 0, /* work item is pending execution */ |
| 27 | WORK_STRUCT_LINKED_BIT = 1, /* next work is linked to this one */ | ||
| 27 | #ifdef CONFIG_DEBUG_OBJECTS_WORK | 28 | #ifdef CONFIG_DEBUG_OBJECTS_WORK |
| 28 | WORK_STRUCT_STATIC_BIT = 1, /* static initializer (debugobjects) */ | 29 | WORK_STRUCT_STATIC_BIT = 2, /* static initializer (debugobjects) */ |
| 29 | WORK_STRUCT_COLOR_SHIFT = 3, /* color for workqueue flushing */ | 30 | WORK_STRUCT_COLOR_SHIFT = 3, /* color for workqueue flushing */ |
| 30 | #else | 31 | #else |
| 31 | WORK_STRUCT_COLOR_SHIFT = 2, /* color for workqueue flushing */ | 32 | WORK_STRUCT_COLOR_SHIFT = 2, /* color for workqueue flushing */ |
| @@ -34,6 +35,7 @@ enum { · 2 unmodified lines | |||
| 34 | WORK_STRUCT_COLOR_BITS = 4, | 35 | WORK_STRUCT_COLOR_BITS = 4, |
| 35 | 36 | ||
| 36 | WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT, | 37 | WORK_STRUCT_PENDING = 1 << WORK_STRUCT_PENDING_BIT, |
| 38 | WORK_STRUCT_LINKED = 1 << WORK_STRUCT_LINKED_BIT, | ||
| 37 | #ifdef CONFIG_DEBUG_OBJECTS_WORK | 39 | #ifdef CONFIG_DEBUG_OBJECTS_WORK |
| 38 | WORK_STRUCT_STATIC = 1 << WORK_STRUCT_STATIC_BIT, | 40 | WORK_STRUCT_STATIC = 1 << WORK_STRUCT_STATIC_BIT, |
| 39 | #else | 41 | #else |