x86: k8 numa register active regions later
authorYinghai Lu <yinghai@kernel.org>
Tue, 6 Jan 2009 02:39:01 +0000 (18:39 -0800)
committerIngo Molnar <mingo@elte.hu>
Tue, 6 Jan 2009 12:21:21 +0000 (13:21 +0100)
Impact: cleanup

don't register early, so we don't need to clear actived regions if it fail
to get node hash shift or wild set in nb config.

also remove nodeids array that is not needed

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/k8topology_64.c

index 41f1b5c00a1d2aaffff37ba01471762a4df1de3b..268f8255280f8d41b4a777573b91e96ad1186a23 100644 (file)
@@ -81,7 +81,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end)
        unsigned numnodes, cores, bits, apicid_base;
        unsigned long prevbase;
        struct bootnode nodes[8];
-       unsigned char nodeids[8];
        int i, j, nb, found = 0;
        u32 nodeid, reg;
 
@@ -110,7 +109,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end)
                limit = read_pci_config(0, nb, 1, 0x44 + i*8);
 
                nodeid = limit & 7;
-               nodeids[i] = nodeid;
                if ((base & 3) == 0) {
                        if (i < numnodes)
                                printk("Skipping disabled node %d\n", i);
@@ -179,9 +177,6 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end)
 
                nodes[nodeid].start = base;
                nodes[nodeid].end = limit;
-               e820_register_active_regions(nodeid,
-                               nodes[nodeid].start >> PAGE_SHIFT,
-                               nodes[nodeid].end >> PAGE_SHIFT);
 
                prevbase = base;
 
@@ -211,12 +206,15 @@ int __init k8_scan_nodes(unsigned long start, unsigned long end)
        }
 
        for (i = 0; i < 8; i++) {
-               if (nodes[i].start != nodes[i].end) {
-                       nodeid = nodeids[i];
-                       for (j = apicid_base; j < cores + apicid_base; j++)
-                               apicid_to_node[(nodeid << bits) + j] = i;
-                       setup_node_bootmem(i, nodes[i].start, nodes[i].end);
-               }
+               if (nodes[i].start == nodes[i].end)
+                       continue;
+
+               e820_register_active_regions(i,
+                               nodes[i].start >> PAGE_SHIFT,
+                               nodes[i].end >> PAGE_SHIFT);
+               for (j = apicid_base; j < cores + apicid_base; j++)
+                       apicid_to_node[(i << bits) + j] = i;
+               setup_node_bootmem(i, nodes[i].start, nodes[i].end);
        }
 
        numa_init_array();