]> err.no Git - linux-2.6/blobdiff - arch/x86/mm/numa_64.c
Merge branch 'smsc47b397-new-id' into release
[linux-2.6] / arch / x86 / mm / numa_64.c
index 5a02bf4c91ec7eac8b9c25da1cf1f666bc2b961f..16b82ad34b961ba08fab68c21076f98e79e89c88 100644 (file)
@@ -221,8 +221,7 @@ void __init setup_node_bootmem(int nodeid, unsigned long start,
                                 bootmap_pages<<PAGE_SHIFT, PAGE_SIZE);
        if (bootmap == NULL)  {
                if (nodedata_phys < start || nodedata_phys >= end)
-                       free_bootmem((unsigned long)node_data[nodeid],
-                                    pgdat_size);
+                       free_bootmem(nodedata_phys, pgdat_size);
                node_data[nodeid] = NULL;
                return;
        }
@@ -238,9 +237,10 @@ void __init setup_node_bootmem(int nodeid, unsigned long start,
 
        free_bootmem_with_active_regions(nodeid, end);
 
-       reserve_bootmem_node(NODE_DATA(nodeid), nodedata_phys, pgdat_size);
+       reserve_bootmem_node(NODE_DATA(nodeid), nodedata_phys, pgdat_size,
+                       BOOTMEM_DEFAULT);
        reserve_bootmem_node(NODE_DATA(nodeid), bootmap_start,
-                            bootmap_pages<<PAGE_SHIFT);
+                       bootmap_pages<<PAGE_SHIFT, BOOTMEM_DEFAULT);
 #ifdef CONFIG_ACPI_NUMA
        srat_reserve_add_area(nodeid);
 #endif
@@ -493,11 +493,13 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
        int i;
 
        nodes_clear(node_possible_map);
+       nodes_clear(node_online_map);
 
 #ifdef CONFIG_NUMA_EMU
        if (cmdline && !numa_emulation(start_pfn, end_pfn))
                return;
        nodes_clear(node_possible_map);
+       nodes_clear(node_online_map);
 #endif
 
 #ifdef CONFIG_ACPI_NUMA
@@ -505,6 +507,7 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
                                          end_pfn << PAGE_SHIFT))
                return;
        nodes_clear(node_possible_map);
+       nodes_clear(node_online_map);
 #endif
 
 #ifdef CONFIG_K8_NUMA
@@ -512,6 +515,7 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
                                        end_pfn<<PAGE_SHIFT))
                return;
        nodes_clear(node_possible_map);
+       nodes_clear(node_online_map);
 #endif
        printk(KERN_INFO "%s\n",
               numa_off ? "NUMA turned off" : "No NUMA configuration found");
@@ -523,7 +527,6 @@ void __init numa_initmem_init(unsigned long start_pfn, unsigned long end_pfn)
        memnode_shift = 63;
        memnodemap = memnode.embedded_map;
        memnodemap[0] = 0;
-       nodes_clear(node_online_map);
        node_set_online(0);
        node_set(0, node_possible_map);
        for (i = 0; i < NR_CPUS; i++)
@@ -618,13 +621,17 @@ void __init init_cpu_to_node(void)
        int i;
 
        for (i = 0; i < NR_CPUS; i++) {
+               int node;
                u16 apicid = x86_cpu_to_apicid_init[i];
 
                if (apicid == BAD_APICID)
                        continue;
-               if (apicid_to_node[apicid] == NUMA_NO_NODE)
+               node = apicid_to_node[apicid];
+               if (node == NUMA_NO_NODE)
+                       continue;
+               if (!node_online(node))
                        continue;
-               numa_set_node(i, apicid_to_node[apicid]);
+               numa_set_node(i, node);
        }
 }