diff options
Diffstat (limited to 'arch/ia64/mm/discontig.c')
| -rw-r--r-- | arch/ia64/mm/discontig.c | 46 |
1 files changed, 12 insertions, 34 deletions
diff --git a/arch/ia64/mm/discontig.c b/arch/ia64/mm/discontig.c index 96722cb1b49d..6eae596c509d 100644 --- a/arch/ia64/mm/discontig.c +++ b/arch/ia64/mm/discontig.c | |||
| @@ -412,37 +412,6 @@ static void __init memory_less_nodes(void) | |||
| 412 | return; | 412 | return; |
| 413 | } | 413 | } |
| 414 | 414 | ||
| 415 | #ifdef CONFIG_SPARSEMEM | ||
| 416 | /** | ||
| 417 | * register_sparse_mem - notify SPARSEMEM that this memory range exists. | ||
| 418 | * @start: physical start of range | ||
| 419 | * @end: physical end of range | ||
| 420 | * @arg: unused | ||
| 421 | * | ||
| 422 | * Simply calls SPARSEMEM to register memory section(s). | ||
| 423 | */ | ||
| 424 | static int __init register_sparse_mem(unsigned long start, unsigned long end, | ||
| 425 | void *arg) | ||
| 426 | { | ||
| 427 | int nid; | ||
| 428 | |||
| 429 | start = __pa(start) >> PAGE_SHIFT; | ||
| 430 | end = __pa(end) >> PAGE_SHIFT; | ||
| 431 | nid = early_pfn_to_nid(start); | ||
| 432 | memory_present(nid, start, end); | ||
| 433 | |||
| 434 | return 0; | ||
| 435 | } | ||
| 436 | |||
| 437 | static void __init arch_sparse_init(void) | ||
| 438 | { | ||
| 439 | efi_memmap_walk(register_sparse_mem, NULL); | ||
| 440 | sparse_init(); | ||
| 441 | } | ||
| 442 | #else | ||
| 443 | #define arch_sparse_init() do {} while (0) | ||
| 444 | #endif | ||
| 445 | |||
| 446 | /** | 415 | /** |
| 447 | * find_memory - walk the EFI memory map and setup the bootmem allocator | 416 | * find_memory - walk the EFI memory map and setup the bootmem allocator |
| 448 | * | 417 | * |
| @@ -473,6 +442,9 @@ void __init find_memory(void) | |||
| 473 | node_clear(node, memory_less_mask); | 442 | node_clear(node, memory_less_mask); |
| 474 | mem_data[node].min_pfn = ~0UL; | 443 | mem_data[node].min_pfn = ~0UL; |
| 475 | } | 444 | } |
| 445 | |||
| 446 | efi_memmap_walk(register_active_ranges, NULL); | ||
| 447 | |||
| 476 | /* | 448 | /* |
| 477 | * Initialize the boot memory maps in reverse order since that's | 449 | * Initialize the boot memory maps in reverse order since that's |
| 478 | * what the bootmem allocator expects | 450 | * what the bootmem allocator expects |
| @@ -506,6 +478,12 @@ void __init find_memory(void) | |||
| 506 | max_pfn = max_low_pfn; | 478 | max_pfn = max_low_pfn; |
| 507 | 479 | ||
| 508 | find_initrd(); | 480 | find_initrd(); |
| 481 | |||
| 482 | #ifdef CONFIG_CRASH_DUMP | ||
| 483 | /* If we are doing a crash dump, we still need to know the real mem | ||
| 484 | * size before original memory map is reset. */ | ||
| 485 | saved_max_pfn = max_pfn; | ||
| 486 | #endif | ||
| 509 | } | 487 | } |
| 510 | 488 | ||
| 511 | #ifdef CONFIG_SMP | 489 | #ifdef CONFIG_SMP |
| @@ -654,7 +632,6 @@ static __init int count_node_pages(unsigned long start, unsigned long len, int n | |||
| 654 | { | 632 | { |
| 655 | unsigned long end = start + len; | 633 | unsigned long end = start + len; |
| 656 | 634 | ||
| 657 | add_active_range(node, start >> PAGE_SHIFT, end >> PAGE_SHIFT); | ||
| 658 | mem_data[node].num_physpages += len >> PAGE_SHIFT; | 635 | mem_data[node].num_physpages += len >> PAGE_SHIFT; |
| 659 | if (start <= __pa(MAX_DMA_ADDRESS)) | 636 | if (start <= __pa(MAX_DMA_ADDRESS)) |
| 660 | mem_data[node].num_dma_physpages += | 637 | mem_data[node].num_dma_physpages += |
| @@ -686,10 +663,11 @@ void __init paging_init(void) | |||
| 686 | 663 | ||
| 687 | max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT; | 664 | max_dma = virt_to_phys((void *) MAX_DMA_ADDRESS) >> PAGE_SHIFT; |
| 688 | 665 | ||
| 689 | arch_sparse_init(); | ||
| 690 | |||
| 691 | efi_memmap_walk(filter_rsvd_memory, count_node_pages); | 666 | efi_memmap_walk(filter_rsvd_memory, count_node_pages); |
| 692 | 667 | ||
| 668 | sparse_memory_present_with_active_regions(MAX_NUMNODES); | ||
| 669 | sparse_init(); | ||
| 670 | |||
| 693 | #ifdef CONFIG_VIRTUAL_MEM_MAP | 671 | #ifdef CONFIG_VIRTUAL_MEM_MAP |
| 694 | vmalloc_end -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) * | 672 | vmalloc_end -= PAGE_ALIGN(ALIGN(max_low_pfn, MAX_ORDER_NR_PAGES) * |
| 695 | sizeof(struct page)); | 673 | sizeof(struct page)); |
