mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-26 14:17:26 -04:00
workqueue: prepare for WQ_UNBOUND implementation
In preparation of WQ_UNBOUND addition, make the following changes. * Add WORK_CPU_* constants for pseudo cpu id numbers used (currently only WORK_CPU_NONE) and use them instead of NR_CPUS. This is to allow another pseudo cpu id for unbound cpu. * Reorder WQ_* flags. * Make workqueue_struct->cpu_wq a union which contains a percpu pointer, regular pointer and an unsigned long value and use kzalloc/kfree() in UP allocation path. This will be used to implement unbound workqueues which will use only one cwq on SMPs. * Move alloc_cwqs() allocation after initialization of wq fields, so that alloc_cwqs() has access to wq->flags. * Trivial relocation of wq local variables in freeze functions. These changes don't cause any functional change. Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
ad72cf9885
commit
bdbc5dd7de
2 changed files with 50 additions and 43 deletions
|
@ -50,6 +50,10 @@ enum {
|
|||
WORK_NR_COLORS = (1 << WORK_STRUCT_COLOR_BITS) - 1,
|
||||
WORK_NO_COLOR = WORK_NR_COLORS,
|
||||
|
||||
/* special cpu IDs */
|
||||
WORK_CPU_NONE = NR_CPUS,
|
||||
WORK_CPU_LAST = WORK_CPU_NONE,
|
||||
|
||||
/*
|
||||
* Reserve 6 bits off of cwq pointer w/ debugobjects turned
|
||||
* off. This makes cwqs aligned to 64 bytes which isn't too
|
||||
|
@ -60,7 +64,7 @@ enum {
|
|||
|
||||
WORK_STRUCT_FLAG_MASK = (1UL << WORK_STRUCT_FLAG_BITS) - 1,
|
||||
WORK_STRUCT_WQ_DATA_MASK = ~WORK_STRUCT_FLAG_MASK,
|
||||
WORK_STRUCT_NO_CPU = NR_CPUS << WORK_STRUCT_FLAG_BITS,
|
||||
WORK_STRUCT_NO_CPU = WORK_CPU_NONE << WORK_STRUCT_FLAG_BITS,
|
||||
|
||||
/* bit mask for work_busy() return values */
|
||||
WORK_BUSY_PENDING = 1 << 0,
|
||||
|
@ -227,9 +231,9 @@ static inline unsigned int work_static(struct work_struct *work) { return 0; }
|
|||
clear_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))
|
||||
|
||||
enum {
|
||||
WQ_FREEZEABLE = 1 << 0, /* freeze during suspend */
|
||||
WQ_NON_REENTRANT = 1 << 0, /* guarantee non-reentrance */
|
||||
WQ_SINGLE_CPU = 1 << 1, /* only single cpu at a time */
|
||||
WQ_NON_REENTRANT = 1 << 2, /* guarantee non-reentrance */
|
||||
WQ_FREEZEABLE = 1 << 2, /* freeze during suspend */
|
||||
WQ_RESCUER = 1 << 3, /* has an rescue worker */
|
||||
WQ_HIGHPRI = 1 << 4, /* high priority */
|
||||
WQ_CPU_INTENSIVE = 1 << 5, /* cpu instensive workqueue */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue