diff options
author | Li Zhong <zhong@linux.vnet.ibm.com> | 2014-08-27 17:34:01 +0800 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2014-09-25 23:14:53 +1000 |
commit | 297cf5025b3bda59e15d6ba1f84022ebd409925b (patch) | |
tree | 96ef77c364307dc99f71fbcd050140e6ca16bcee /arch/powerpc/mm/numa.c | |
parent | bc3c4327c92b9ceb9a6356ec64d1b2ab2dc851f9 (diff) | |
download | linux-297cf5025b3bda59e15d6ba1f84022ebd409925b.tar.gz linux-297cf5025b3bda59e15d6ba1f84022ebd409925b.tar.bz2 linux-297cf5025b3bda59e15d6ba1f84022ebd409925b.zip |
powerpc: some changes in numa_setup_cpu()
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>
Diffstat (limited to 'arch/powerpc/mm/numa.c')
-rw-r--r-- | arch/powerpc/mm/numa.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index 3a9061e9f5dd..ec32d463cad9 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c @@ -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; } |