|
@@ -26,8 +26,6 @@
|
|
|
|
|
|
int acpi_numa __initdata;
|
|
|
|
|
|
-static struct bootnode nodes_add[MAX_NUMNODES];
|
|
|
-
|
|
|
static __init int setup_node(int pxm)
|
|
|
{
|
|
|
return acpi_map_pxm_to_node(pxm);
|
|
@@ -37,7 +35,6 @@ static __init void bad_srat(void)
|
|
|
{
|
|
|
printk(KERN_ERR "SRAT: SRAT not used.\n");
|
|
|
acpi_numa = -1;
|
|
|
- memset(nodes_add, 0, sizeof(nodes_add));
|
|
|
}
|
|
|
|
|
|
static __init inline int srat_disabled(void)
|
|
@@ -131,67 +128,11 @@ acpi_numa_processor_affinity_init(struct acpi_srat_cpu_affinity *pa)
|
|
|
pxm, apic_id, node);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_MEMORY_HOTPLUG_SPARSE
|
|
|
+#ifdef CONFIG_MEMORY_HOTPLUG
|
|
|
static inline int save_add_info(void) {return 1;}
|
|
|
#else
|
|
|
static inline int save_add_info(void) {return 0;}
|
|
|
#endif
|
|
|
-/*
|
|
|
- * Update nodes_add[]
|
|
|
- * This code supports one contiguous hot add area per node
|
|
|
- */
|
|
|
-static void __init
|
|
|
-update_nodes_add(int node, unsigned long start, unsigned long end)
|
|
|
-{
|
|
|
- unsigned long s_pfn = start >> PAGE_SHIFT;
|
|
|
- unsigned long e_pfn = end >> PAGE_SHIFT;
|
|
|
- int changed = 0;
|
|
|
- struct bootnode *nd = &nodes_add[node];
|
|
|
-
|
|
|
- /* I had some trouble with strange memory hotadd regions breaking
|
|
|
- the boot. Be very strict here and reject anything unexpected.
|
|
|
- If you want working memory hotadd write correct SRATs.
|
|
|
-
|
|
|
- The node size check is a basic sanity check to guard against
|
|
|
- mistakes */
|
|
|
- if ((signed long)(end - start) < NODE_MIN_SIZE) {
|
|
|
- printk(KERN_ERR "SRAT: Hotplug area too small\n");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- /* This check might be a bit too strict, but I'm keeping it for now. */
|
|
|
- if (absent_pages_in_range(s_pfn, e_pfn) != e_pfn - s_pfn) {
|
|
|
- printk(KERN_ERR
|
|
|
- "SRAT: Hotplug area %lu -> %lu has existing memory\n",
|
|
|
- s_pfn, e_pfn);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- /* Looks good */
|
|
|
-
|
|
|
- if (nd->start == nd->end) {
|
|
|
- nd->start = start;
|
|
|
- nd->end = end;
|
|
|
- changed = 1;
|
|
|
- } else {
|
|
|
- if (nd->start == end) {
|
|
|
- nd->start = start;
|
|
|
- changed = 1;
|
|
|
- }
|
|
|
- if (nd->end == start) {
|
|
|
- nd->end = end;
|
|
|
- changed = 1;
|
|
|
- }
|
|
|
- if (!changed)
|
|
|
- printk(KERN_ERR "SRAT: Hotplug zone not continuous. Partly ignored\n");
|
|
|
- }
|
|
|
-
|
|
|
- if (changed) {
|
|
|
- node_set(node, numa_nodes_parsed);
|
|
|
- printk(KERN_INFO "SRAT: hot plug zone found %Lx - %Lx\n",
|
|
|
- nd->start, nd->end);
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
/* Callback for parsing of the Proximity Domain <-> Memory Area mappings */
|
|
|
void __init
|
|
@@ -228,9 +169,6 @@ acpi_numa_memory_affinity_init(struct acpi_srat_mem_affinity *ma)
|
|
|
|
|
|
printk(KERN_INFO "SRAT: Node %u PXM %u %lx-%lx\n", node, pxm,
|
|
|
start, end);
|
|
|
-
|
|
|
- if (ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)
|
|
|
- update_nodes_add(node, start, end);
|
|
|
}
|
|
|
|
|
|
void __init acpi_numa_arch_fixup(void) {}
|
|
@@ -244,17 +182,3 @@ int __init x86_acpi_numa_init(void)
|
|
|
return ret;
|
|
|
return srat_disabled() ? -EINVAL : 0;
|
|
|
}
|
|
|
-
|
|
|
-#if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) || defined(CONFIG_ACPI_HOTPLUG_MEMORY)
|
|
|
-int memory_add_physaddr_to_nid(u64 start)
|
|
|
-{
|
|
|
- int i, ret = 0;
|
|
|
-
|
|
|
- for_each_node(i)
|
|
|
- if (nodes_add[i].start <= start && nodes_add[i].end > start)
|
|
|
- ret = i;
|
|
|
-
|
|
|
- return ret;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);
|
|
|
-#endif
|