]> 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 a920d09b91948dcf8ea42b6c95f09fbbb07a2145..16b82ad34b961ba08fab68c21076f98e79e89c88 100644 (file)
@@ -202,6 +202,8 @@ void __init setup_node_bootmem(int nodeid, unsigned long start,
        if (node_data[nodeid] == NULL)
                return;
        nodedata_phys = __pa(node_data[nodeid]);
+       printk(KERN_INFO "  NODE_DATA [%016lx - %016lx]\n", nodedata_phys,
+               nodedata_phys + pgdat_size - 1);
 
        memset(NODE_DATA(nodeid), 0, sizeof(pg_data_t));
        NODE_DATA(nodeid)->bdata = &plat_node_bdata[nodeid];
@@ -219,23 +221,26 @@ 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;
        }
        bootmap_start = __pa(bootmap);
-       Dprintk("bootmap start %lu pages %lu\n", bootmap_start, bootmap_pages);
 
        bootmap_size = init_bootmem_node(NODE_DATA(nodeid),
                                         bootmap_start >> PAGE_SHIFT,
                                         start_pfn, end_pfn);
 
+       printk(KERN_INFO "  bootmap [%016lx -  %016lx] pages %lx\n",
+                bootmap_start, bootmap_start + bootmap_size - 1,
+                bootmap_pages);
+
        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
@@ -488,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
@@ -500,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
@@ -507,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");
@@ -518,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++)
@@ -613,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);
        }
 }