workqueue: allow more off-queue flag space
authorLai Jiangshan <laijs@cn.fujitsu.com>
Tue, 19 Feb 2013 20:17:01 +0000 (12:17 -0800)
committerTejun Heo <tj@kernel.org>
Mon, 4 Mar 2013 17:44:57 +0000 (09:44 -0800)
When a work item is off-queue, its work->data contains WORK_STRUCT_*
and WORK_OFFQ_* flags.  As WORK_OFFQ_* flags are used only while a
work item is off-queue, it can occupy bits of work->data which aren't
used while off-queue.  WORK_OFFQ_* currently only use bits used by
on-queue CWQ pointer.  As color bits aren't used while off-queue,
there's no reason to not use them.

Lower WORK_OFFQ_FLAG_BASE from WORK_STRUCT_FLAG_BITS to
WORK_STRUCT_COLOR_SHIFT thus giving 4 more bits to off-queue flag
space which is also used to record worker_pool ID while off-queue.

This doesn't introduce any visible behavior difference.

tj: Rewrote the description.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
include/linux/workqueue.h

index 8afab27cdbc2913bd95e8becb6c08fdfa06b7de9..5bd030f630a9d3730664eeb4005ebffcadaf08e8 100644 (file)
@@ -68,7 +68,7 @@ enum {
                                  WORK_STRUCT_COLOR_BITS,
 
        /* data contains off-queue information when !WORK_STRUCT_PWQ */
-       WORK_OFFQ_FLAG_BASE     = WORK_STRUCT_FLAG_BITS,
+       WORK_OFFQ_FLAG_BASE     = WORK_STRUCT_COLOR_SHIFT,
 
        WORK_OFFQ_CANCELING     = (1 << WORK_OFFQ_FLAG_BASE),