diff options
author | Andi Kleen <ak@suse.de> | 2005-11-05 11:25:53 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-14 22:55:14 -0500 |
commit | 69d81fcde7797342417591ba7affb372b9c86eae (patch) | |
tree | 97fbc73fd20f8ebc313b2bc41367a8efe36c2c3d /arch | |
parent | 50895c5d76e15d8af480eff1aaab5770cabbc2c2 (diff) |
[PATCH] x86_64: Speed up numa_node_id by putting it directly into the PDA
Not go from the CPU number to an mapping array.
Mode number is often used now in fast paths.
This also adds a generic numa_node_id to all the topology includes
Suggested by Eric Dumazet
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/kernel/setup.c | 4 | ||||
-rw-r--r-- | arch/x86_64/mm/numa.c | 10 | ||||
-rw-r--r-- | arch/x86_64/mm/srat.c | 2 |
3 files changed, 11 insertions, 5 deletions
diff --git a/arch/x86_64/kernel/setup.c b/arch/x86_64/kernel/setup.c index f27731ac95c5..99cfa751949a 100644 --- a/arch/x86_64/kernel/setup.c +++ b/arch/x86_64/kernel/setup.c | |||
@@ -823,7 +823,7 @@ static void __init amd_detect_cmp(struct cpuinfo_x86 *c) | |||
823 | if (!node_online(node)) | 823 | if (!node_online(node)) |
824 | node = nearby_node(apicid); | 824 | node = nearby_node(apicid); |
825 | } | 825 | } |
826 | cpu_to_node[cpu] = node; | 826 | numa_set_node(cpu, node); |
827 | 827 | ||
828 | printk(KERN_INFO "CPU %d(%d) -> Node %d -> Core %d\n", | 828 | printk(KERN_INFO "CPU %d(%d) -> Node %d -> Core %d\n", |
829 | cpu, c->x86_num_cores, node, cpu_core_id[cpu]); | 829 | cpu, c->x86_num_cores, node, cpu_core_id[cpu]); |
@@ -975,7 +975,7 @@ static void srat_detect_node(void) | |||
975 | node = apicid_to_node[hard_smp_processor_id()]; | 975 | node = apicid_to_node[hard_smp_processor_id()]; |
976 | if (node == NUMA_NO_NODE) | 976 | if (node == NUMA_NO_NODE) |
977 | node = 0; | 977 | node = 0; |
978 | cpu_to_node[cpu] = node; | 978 | numa_set_node(cpu, node); |
979 | 979 | ||
980 | if (acpi_numa > 0) | 980 | if (acpi_numa > 0) |
981 | printk(KERN_INFO "CPU %d -> Node %d\n", cpu, node); | 981 | printk(KERN_INFO "CPU %d -> Node %d\n", cpu, node); |
diff --git a/arch/x86_64/mm/numa.c b/arch/x86_64/mm/numa.c index 18e86e2eac2d..4bf64583ba3b 100644 --- a/arch/x86_64/mm/numa.c +++ b/arch/x86_64/mm/numa.c | |||
@@ -156,7 +156,7 @@ void __init numa_init_array(void) | |||
156 | for (i = 0; i < NR_CPUS; i++) { | 156 | for (i = 0; i < NR_CPUS; i++) { |
157 | if (cpu_to_node[i] != NUMA_NO_NODE) | 157 | if (cpu_to_node[i] != NUMA_NO_NODE) |
158 | continue; | 158 | continue; |
159 | cpu_to_node[i] = rr; | 159 | numa_set_node(i, rr); |
160 | rr = next_node(rr, node_online_map); | 160 | rr = next_node(rr, node_online_map); |
161 | if (rr == MAX_NUMNODES) | 161 | if (rr == MAX_NUMNODES) |
162 | rr = first_node(node_online_map); | 162 | rr = first_node(node_online_map); |
@@ -242,7 +242,7 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn) | |||
242 | nodes_clear(node_online_map); | 242 | nodes_clear(node_online_map); |
243 | node_set_online(0); | 243 | node_set_online(0); |
244 | for (i = 0; i < NR_CPUS; i++) | 244 | for (i = 0; i < NR_CPUS; i++) |
245 | cpu_to_node[i] = 0; | 245 | numa_set_node(i, 0); |
246 | node_to_cpumask[0] = cpumask_of_cpu(0); | 246 | node_to_cpumask[0] = cpumask_of_cpu(0); |
247 | setup_node_bootmem(0, start_pfn << PAGE_SHIFT, end_pfn << PAGE_SHIFT); | 247 | setup_node_bootmem(0, start_pfn << PAGE_SHIFT, end_pfn << PAGE_SHIFT); |
248 | } | 248 | } |
@@ -252,6 +252,12 @@ __cpuinit void numa_add_cpu(int cpu) | |||
252 | set_bit(cpu, &node_to_cpumask[cpu_to_node(cpu)]); | 252 | set_bit(cpu, &node_to_cpumask[cpu_to_node(cpu)]); |
253 | } | 253 | } |
254 | 254 | ||
255 | void __cpuinit numa_set_node(int cpu, int node) | ||
256 | { | ||
257 | cpu_pda[cpu].nodenumber = node; | ||
258 | cpu_to_node[cpu] = node; | ||
259 | } | ||
260 | |||
255 | unsigned long __init numa_free_all_bootmem(void) | 261 | unsigned long __init numa_free_all_bootmem(void) |
256 | { | 262 | { |
257 | int i; | 263 | int i; |
diff --git a/arch/x86_64/mm/srat.c b/arch/x86_64/mm/srat.c index 4b2e844c15a7..c7aa08a58041 100644 --- a/arch/x86_64/mm/srat.c +++ b/arch/x86_64/mm/srat.c | |||
@@ -203,7 +203,7 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end) | |||
203 | if (cpu_to_node[i] == NUMA_NO_NODE) | 203 | if (cpu_to_node[i] == NUMA_NO_NODE) |
204 | continue; | 204 | continue; |
205 | if (!node_isset(cpu_to_node[i], nodes_parsed)) | 205 | if (!node_isset(cpu_to_node[i], nodes_parsed)) |
206 | cpu_to_node[i] = NUMA_NO_NODE; | 206 | numa_set_node(i, NUMA_NO_NODE); |
207 | } | 207 | } |
208 | numa_init_array(); | 208 | numa_init_array(); |
209 | return 0; | 209 | return 0; |