lkml.org 
[lkml]   [2017]   [Nov]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 164/294] cpumask: fix spurious cpumask_of_node() on non-NUMA multi-node configs
    3.16.50-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Tejun Heo <tj@kernel.org>

    commit b339752d054fb32863418452dff350a1086885b1 upstream.

    When !NUMA, cpumask_of_node(@node) equals cpu_online_mask regardless of
    @node. The assumption seems that if !NUMA, there shouldn't be more than
    one node and thus reporting cpu_online_mask regardless of @node is
    correct. However, that assumption was broken years ago to support
    DISCONTIGMEM and whether a system has multiple nodes or not is
    separately controlled by NEED_MULTIPLE_NODES.

    This means that, on a system with !NUMA && NEED_MULTIPLE_NODES,
    cpumask_of_node() will report cpu_online_mask for all possible nodes,
    indicating that the CPUs are associated with multiple nodes which is an
    impossible configuration.

    This bug has been around forever but doesn't look like it has caused any
    noticeable symptoms. However, it triggers a WARN recently added to
    workqueue to verify NUMA affinity configuration.

    Fix it by reporting empty cpumask on non-zero nodes if !NUMA.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reported-and-tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    include/asm-generic/topology.h | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    --- a/include/asm-generic/topology.h
    +++ b/include/asm-generic/topology.h
    @@ -48,7 +48,11 @@
    #define parent_node(node) ((void)(node),0)
    #endif
    #ifndef cpumask_of_node
    -#define cpumask_of_node(node) ((void)node, cpu_online_mask)
    + #ifdef CONFIG_NEED_MULTIPLE_NODES
    + #define cpumask_of_node(node) ((node) == 0 ? cpu_online_mask : cpu_none_mask)
    + #else
    + #define cpumask_of_node(node) ((void)node, cpu_online_mask)
    + #endif
    #endif
    #ifndef pcibus_to_node
    #define pcibus_to_node(bus) ((void)(bus), -1)
    \
     
     \ /
      Last update: 2017-11-08 20:58    [W:4.197 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site