• Tejun Heo's avatar
    workqueue: Modularize wq_pod_type initialization · 025e1684
    Tejun Heo authored
    While wq_pod_type[] can now group CPUs in any aribitrary way, WQ_AFFN_NUM
    init is hard coded into workqueue_init_topology(). This patch modularizes
    the init path by introducing init_pod_type() which takes a callback to
    determine whether two CPUs should share a pod as an argument.
    
    init_pod_type() first scans the CPU combinations testing for sharing to
    assign consecutive pod IDs and initialize pod_type->cpu_pod[]. Once
    ->cpu_pod[] is determined, ->pod_cpus[] and ->pod_node[] are initialized
    accordingly. WQ_AFFN_NUMA is now initialized by calling init_pod_type() with
    cpus_share_numa() which tests whether the CPU belongs to the same NUMA node.
    
    This patch may change the pod ID assigned to each NUMA node but that
    shouldn't cause any behavior changes as the NUMA node to use for allocations
    are tracked separately in pod_type->pod_node[]. This makes adding new
    affinty types pretty easy.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    025e1684
workqueue.c 182 KB