Merge branch 'topic/hda' into for-linus
[pandora-kernel.git] / arch / x86 / mm / srat_64.c
index 13d56f5..0176595 100644 (file)
 #include <asm/proto.h>
 #include <asm/numa.h>
 #include <asm/e820.h>
-#include <asm/genapic.h>
+#include <asm/apic.h>
+#include <asm/uv/uv.h>
 
 int acpi_numa __initdata;
 
 static struct acpi_table_slit *acpi_slit;
 
 static nodemask_t nodes_parsed __initdata;
+static nodemask_t cpu_nodes_parsed __initdata;
 static struct bootnode nodes[MAX_NUMNODES] __initdata;
 static struct bootnode nodes_add[MAX_NUMNODES];
 static int found_add_area __initdata;
@@ -140,6 +142,7 @@ acpi_numa_x2apic_affinity_init(struct acpi_srat_x2apic_cpu_affinity *pa)
 
        apic_id = pa->apic_id;
        apicid_to_node[apic_id] = node;
+       node_set(node, cpu_nodes_parsed);
        acpi_numa = 1;
        printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n",
               pxm, apic_id, node);
@@ -173,6 +176,7 @@ acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa)
        else
                apic_id = pa->apic_id;
        apicid_to_node[apic_id] = node;
+       node_set(node, cpu_nodes_parsed);
        acpi_numa = 1;
        printk(KERN_INFO "SRAT: PXM %u -> APIC %u -> Node %u\n",
               pxm, apic_id, node);
@@ -357,6 +361,7 @@ static void __init unparse_node(int node)
 {
        int i;
        node_clear(node, nodes_parsed);
+       node_clear(node, cpu_nodes_parsed);
        for (i = 0; i < MAX_LOCAL_APIC; i++) {
                if (apicid_to_node[i] == node)
                        apicid_to_node[i] = NUMA_NO_NODE;
@@ -401,7 +406,8 @@ int __init acpi_scan_nodes(unsigned long start, unsigned long end)
                return -1;
        }
 
-       node_possible_map = nodes_parsed;
+       /* Account for nodes with cpus and no memory */
+       nodes_or(node_possible_map, nodes_parsed, cpu_nodes_parsed);
 
        /* Finally register nodes */
        for_each_node_mask(i, node_possible_map)