diff options
Diffstat (limited to 'arch/x86/mm/k8topology_64.c')
-rw-r--r-- | arch/x86/mm/k8topology_64.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/arch/x86/mm/k8topology_64.c b/arch/x86/mm/k8topology_64.c index 41f1b5c00a1d..268f8255280f 100644 --- a/arch/x86/mm/k8topology_64.c +++ b/arch/x86/mm/k8topology_64.c | |||
@@ -81,7 +81,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
81 | unsigned numnodes, cores, bits, apicid_base; | 81 | unsigned numnodes, cores, bits, apicid_base; |
82 | unsigned long prevbase; | 82 | unsigned long prevbase; |
83 | struct bootnode nodes[8]; | 83 | struct bootnode nodes[8]; |
84 | unsigned char nodeids[8]; | ||
85 | int i, j, nb, found = 0; | 84 | int i, j, nb, found = 0; |
86 | u32 nodeid, reg; | 85 | u32 nodeid, reg; |
87 | 86 | ||
@@ -110,7 +109,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
110 | limit = read_pci_config(0, nb, 1, 0x44 + i*8); | 109 | limit = read_pci_config(0, nb, 1, 0x44 + i*8); |
111 | 110 | ||
112 | nodeid = limit & 7; | 111 | nodeid = limit & 7; |
113 | nodeids[i] = nodeid; | ||
114 | if ((base & 3) == 0) { | 112 | if ((base & 3) == 0) { |
115 | if (i < numnodes) | 113 | if (i < numnodes) |
116 | printk("Skipping disabled node %d\n", i); | 114 | printk("Skipping disabled node %d\n", i); |
@@ -179,9 +177,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
179 | 177 | ||
180 | nodes[nodeid].start = base; | 178 | nodes[nodeid].start = base; |
181 | nodes[nodeid].end = limit; | 179 | nodes[nodeid].end = limit; |
182 | e820_register_active_regions(nodeid, | ||
183 | nodes[nodeid].start >> PAGE_SHIFT, | ||
184 | nodes[nodeid].end >> PAGE_SHIFT); | ||
185 | 180 | ||
186 | prevbase = base; | 181 | prevbase = base; |
187 | 182 | ||
@@ -211,12 +206,15 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end) | |||
211 | } | 206 | } |
212 | 207 | ||
213 | for (i = 0; i < 8; i++) { | 208 | for (i = 0; i < 8; i++) { |
214 | if (nodes[i].start != nodes[i].end) { | 209 | if (nodes[i].start == nodes[i].end) |
215 | nodeid = nodeids[i]; | 210 | continue; |
216 | for (j = apicid_base; j < cores + apicid_base; j++) | 211 | |
217 | apicid_to_node[(nodeid << bits) + j] = i; | 212 | e820_register_active_regions(i, |
218 | setup_node_bootmem(i, nodes[i].start, nodes[i].end); | 213 | nodes[i].start >> PAGE_SHIFT, |
219 | } | 214 | nodes[i].end >> PAGE_SHIFT); |
215 | for (j = apicid_base; j < cores + apicid_base; j++) | ||
216 | apicid_to_node[(i << bits) + j] = i; | ||
217 | setup_node_bootmem(i, nodes[i].start, nodes[i].end); | ||
220 | } | 218 | } |
221 | 219 | ||
222 | numa_init_array(); | 220 | numa_init_array(); |