• Michael Bringmann's avatar
    workqueue: Work around edge cases for calc of pool's cpumask · 1ad0f0a7
    Michael Bringmann authored
    There is an underlying assumption/trade-off in many layers of the Linux
    system that CPU <-> node mapping is static.  This is despite the presence
    of features like NUMA and 'hotplug' that support the dynamic addition/
    removal of fundamental system resources like CPUs and memory.  PowerPC
    systems, however, do provide extensive features for the dynamic change
    of resources available to a system.
    Currently, there is little or no synchronization protection around the
    updating of the CPU <-> node mapping, and the export/update of this
    information for other layers / modules.  In systems which can change
    this mapping during 'hotplug', like PowerPC, the information is changing
    underneath all layers that might reference it.
    This patch attempts to ensure that a valid, usable cpumask attribute
    is used by the workqueue infrastructure when setting up new resource
    pools.  It prevents a crash that has been observed when an 'empty'
    cpumask is passed along to the worker/task scheduling code.  It is
    intended as a temporary workaround until a more fundamental review and
    correction of the issue can be done.
    [With additions to the patch provided by Tejun Hao <tj@kernel.org>]
    Signed-off-by: default avatarMichael Bringmann <mwb@linux.vnet.ibm.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
workqueue.c 156 KB