• Tejun Heo's avatar
    workqueue: Generalize unbound CPU pods · 84193c07
    Tejun Heo authored
    While renamed to pod, the code still assumes that the pods are defined by
    NUMA boundaries. Let's generalize it:
    
    * workqueue_attrs->affn_scope is added. Each enum represents the type of
      boundaries that define the pods. There are currently two scopes -
      WQ_AFFN_NUMA and WQ_AFFN_SYSTEM. The former is the same behavior as before
      - one pod per NUMA node. The latter defines one global pod across the
      whole system.
    
    * struct wq_pod_type is added which describes how pods are configured for
      each affnity scope. For each pod, it lists the member CPUs and the
      preferred NUMA node for memory allocations. The reverse mapping from CPU
      to pod is also available.
    
    * wq_pod_enabled is dropped. Pod is now always enabled. The previously
      disabled behavior is now implemented through WQ_AFFN_SYSTEM.
    
    * get_unbound_pool() wants to determine the NUMA node to allocate memory
      from for the new pool. The variables are renamed from node to pod but the
      logic still assumes they're one and the same. Clearly distinguish them -
      walk the WQ_AFFN_NUMA pods to find the matching pod and then use the pod's
      NUMA node.
    
    * wq_calc_pod_cpumask() was taking @pod but assumed that it was the NUMA
      node. Take @cpu instead and determine the cpumask to use from the pod_type
      matching @attrs.
    
    * apply_wqattrs_prepare() is update to return ERR_PTR() on error instead of
      NULL so that it can indicate -EINVAL on invalid affinity scopes.
    
    This patch allows CPUs to be grouped into pods however desired per type.
    While this patch causes some internal behavior changes, nothing material
    should change for workqueue users.
    
    v2: Trigger WARN_ON_ONCE() in wqattrs_pod_type() if affn_scope is
        WQ_AFFN_NR_TYPES which indicates that the function is called with a
        worker_pool's attrs instead of a workqueue's.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    84193c07
workqueue.c 182 KB