powerpc: some changes in numa_setup_cpu()
authorLi Zhong <zhong@linux.vnet.ibm.com>
Wed, 27 Aug 2014 09:34:01 +0000 (17:34 +0800)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 25 Sep 2014 13:14:53 +0000 (23:14 +1000)
this patches changes some error handling logics in numa_setup_cpu(),
when cpu node is not found, so:

if the cpu is possible, but not present, -1 is kept in numa_cpu_lookup_table,
so later, if the cpu is added, we could set correct numa information for it.

if the cpu is present, then we set the first online node to
numa_cpu_lookup_table instead of 0 ( in case 0 might not be an online node? )

Cc: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
Cc: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: Li Zhong <zhong@linux.vnet.ibm.com>
Acked-by: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/mm/numa.c

index 3a9061e9f5dd3c69d0183a2925754fdce955fee7..ec32d463cad916d7e3320cbb23a1bb9d3c0a9b73 100644 (file)
@@ -538,7 +538,7 @@ static int of_drconf_to_nid_single(struct of_drconf_cell *drmem,
  */
 static int numa_setup_cpu(unsigned long lcpu)
 {
-       int nid;
+       int nid = -1;
        struct device_node *cpu;
 
        /*
@@ -555,19 +555,21 @@ static int numa_setup_cpu(unsigned long lcpu)
 
        if (!cpu) {
                WARN_ON(1);
-               nid = 0;
-               goto out;
+               if (cpu_present(lcpu))
+                       goto out_present;
+               else
+                       goto out;
        }
 
        nid = of_node_to_nid_single(cpu);
 
+out_present:
        if (nid < 0 || !node_online(nid))
                nid = first_online_node;
-out:
-       map_cpu_to_node(lcpu, nid);
 
+       map_cpu_to_node(lcpu, nid);
        of_node_put(cpu);
-
+out:
        return nid;
 }