• Tejun Heo's avatar
    workqueue: map an unbound workqueues to multiple per-node pool_workqueues · df2d5ae4
    Tejun Heo authored
    Currently, an unbound workqueue has only one "current" pool_workqueue
    associated with it.  It may have multple pool_workqueues but only the
    first pool_workqueue servies new work items.  For NUMA affinity, we
    want to change this so that there are multiple current pool_workqueues
    serving different NUMA nodes.
    
    Introduce workqueue->numa_pwq_tbl[] which is indexed by NUMA node and
    points to the pool_workqueue to use for each possible node.  This
    replaces first_pwq() in __queue_work() and workqueue_congested().
    
    numa_pwq_tbl[] is currently initialized to point to the same
    pool_workqueue as first_pwq() so this patch doesn't make any behavior
    changes.
    
    v2: Use rcu_dereference_raw() in unbound_pwq_by_node() as the function
        may be called only with wq->mutex held.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reviewed-by: default avatarLai Jiangshan <laijs@cn.fujitsu.com>
    df2d5ae4
workqueue.c 125 KB