aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/i386/mm/discontig.c28
-rw-r--r--arch/i386/mm/init.c10
2 files changed, 30 insertions, 8 deletions
diff --git a/arch/i386/mm/discontig.c b/arch/i386/mm/discontig.c
index 103b76e56a94..e0c390d6ceb5 100644
--- a/arch/i386/mm/discontig.c
+++ b/arch/i386/mm/discontig.c
@@ -405,3 +405,31 @@ void __init set_highmem_pages_init(int bad_ppro)
405 totalram_pages += totalhigh_pages; 405 totalram_pages += totalhigh_pages;
406#endif 406#endif
407} 407}
408
409#ifdef CONFIG_MEMORY_HOTPLUG
410int paddr_to_nid(u64 addr)
411{
412 int nid;
413 unsigned long pfn = PFN_DOWN(addr);
414
415 for_each_node(nid)
416 if (node_start_pfn[nid] <= pfn &&
417 pfn < node_end_pfn[nid])
418 return nid;
419
420 return -1;
421}
422
423/*
424 * This function is used to ask node id BEFORE memmap and mem_section's
425 * initialization (pfn_to_nid() can't be used yet).
426 * If _PXM is not defined on ACPI's DSDT, node id must be found by this.
427 */
428int memory_add_physaddr_to_nid(u64 addr)
429{
430 int nid = paddr_to_nid(addr);
431 return (nid >= 0) ? nid : 0;
432}
433
434EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);
435#endif
diff --git a/arch/i386/mm/init.c b/arch/i386/mm/init.c
index 84697dfc7348..60a7e57af197 100644
--- a/arch/i386/mm/init.c
+++ b/arch/i386/mm/init.c
@@ -673,16 +673,10 @@ void __init mem_init(void)
673#endif 673#endif
674} 674}
675 675
676/*
677 * this is for the non-NUMA, single node SMP system case.
678 * Specifically, in the case of x86, we will always add
679 * memory to the highmem for now.
680 */
681#ifdef CONFIG_MEMORY_HOTPLUG 676#ifdef CONFIG_MEMORY_HOTPLUG
682#ifndef CONFIG_NEED_MULTIPLE_NODES
683int arch_add_memory(int nid, u64 start, u64 size) 677int arch_add_memory(int nid, u64 start, u64 size)
684{ 678{
685 struct pglist_data *pgdata = &contig_page_data; 679 struct pglist_data *pgdata = NODE_DATA(nid);
686 struct zone *zone = pgdata->node_zones + ZONE_HIGHMEM; 680 struct zone *zone = pgdata->node_zones + ZONE_HIGHMEM;
687 unsigned long start_pfn = start >> PAGE_SHIFT; 681 unsigned long start_pfn = start >> PAGE_SHIFT;
688 unsigned long nr_pages = size >> PAGE_SHIFT; 682 unsigned long nr_pages = size >> PAGE_SHIFT;
@@ -694,7 +688,7 @@ int remove_memory(u64 start, u64 size)
694{ 688{
695 return -EINVAL; 689 return -EINVAL;
696} 690}
697#endif 691EXPORT_SYMBOL_GPL(remove_memory);
698#endif 692#endif
699 693
700struct kmem_cache *pgd_cache; 694struct kmem_cache *pgd_cache;