• Lai Jiangshan's avatar
    workqueue: make get_work_pool_id() cheaper · 54d5b7d0
    Lai Jiangshan authored
    get_work_pool_id() currently first obtains pool using get_work_pool()
    and then return pool->id.  For an off-queue work item, this involves
    obtaining pool ID from worker->data, performing idr_find() to find the
    matching pool and then returning its pool->id which of course is the
    same as the one which went into idr_find().
    
    Just open code WORK_STRUCT_CWQ case and directly return pool ID from
    work->data.
    
    tj: The original patch dropped on-queue work item handling and renamed
        the function to offq_work_pool_id().  There isn't much benefit in
        doing so.  Handling it only requires a single if() and we need at
        least BUG_ON(), which is also a branch, even if we drop on-queue
        handling.  Open code WORK_STRUCT_CWQ case and keep the function in
        line with get_work_pool().  Rewrote the description.
    Signed-off-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    54d5b7d0
workqueue.c 105 KB