• Tejun Heo's avatar
    workqueue: Initialize unbound CPU pods later in the boot · 2930155b
    Tejun Heo authored
    During boot, to initialize unbound CPU pods, wq_pod_init() was called from
    workqueue_init(). This is early enough for NUMA nodes to be set up but
    before SMP is brought up and CPU topology information is populated.
    
    Workqueue is in the process of improving CPU locality for unbound workqueues
    and will need access to topology information during pod init. This adds a
    new init function workqueue_init_topology() which is called after CPU
    topology information is available and replaces wq_pod_init().
    
    As unbound CPU pods are now initialized after workqueues are activated, we
    need to revisit the workqueues to apply the pod configuration. Workqueues
    which are created before workqueue_init_topology() are set up so that they
    always use the default worker pool. After pods are set up in
    workqueue_init_topology(), wq_update_pod() is called on all existing
    workqueues to update the pool associations accordingly.
    
    Note that wq_update_pod_attrs_buf allocation is moved to
    workqueue_init_early(). This isn't necessary right now but enables further
    generalization of pod handling in the future.
    
    This patch changes the initialization sequence but the end result should be
    the same.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    2930155b
workqueue.c 180 KB