Skip to content
  • Tim Chen's avatar
    cpu: fix node state for whether it contains CPU · 03e86dba
    Tim Chen authored
    In current kernel code, we only call node_set_state(cpu_to_node(cpu),
    N_CPU) when a cpu is hot plugged.  But we do not set the node state for
    N_CPU when the cpus are brought online during boot.
    
    So this could lead to failure when we check to see if a node contains
    cpu with node_state(node_id, N_CPU).
    
    One use case is in the node_reclaime function:
    
            /*
             * Only run node reclaim on the local node or on nodes that do
             * not
             * have associated processors. This will favor the local
             * processor
             * over remote processors and spread off node memory allocations
             * as wide as possible.
             */
            if (node_state(pgdat->node_id, N_CPU) && pgdat->node_id !=
                    numa_node_id())
                    return NODE_RECLAIM_NOSCAN;
    
    I instrumented the kernel to call this function after boot and it always
    returns 0 on a x86 desktop machine until I apply the attached patch.
    
       int num_cpu_node(void)
       {
           int i, nr_cpu_nodes = 0;
    
           for_each_node(i) {
                   if (node_state(i, N_CPU))
                           ++ nr_cpu_nodes;
           }
    
           return nr_cpu_nodes;
       }
    
    Fix this by checking each node for online CPU when we initialize
    vmstat that's responsible for maintaining node state.
    
    Link: http://lkml.kernel.org/r/20160829175922.GA21775@linux.intel.com
    
    
    Signed-off-by: default avatarTim Chen <tim.c.chen@linux.intel.com>
    Acked-by: default avatarDavid Rientjes <rientjes@google.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Cc: <Huang@linux.intel.com>
    Cc: Ying <ying.huang@intel.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    03e86dba