aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mm/init.c')
-rw-r--r--arch/arm/mm/init.c58
1 files changed, 7 insertions, 51 deletions
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 2ffee02d1d5c..6833cbead6cc 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -583,9 +583,6 @@ static void __init free_highpages(void)
583 */ 583 */
584void __init mem_init(void) 584void __init mem_init(void)
585{ 585{
586 unsigned long reserved_pages, free_pages;
587 struct memblock_region *reg;
588 int i;
589#ifdef CONFIG_HAVE_TCM 586#ifdef CONFIG_HAVE_TCM
590 /* These pointers are filled in on TCM detection */ 587 /* These pointers are filled in on TCM detection */
591 extern u32 dtcm_end; 588 extern u32 dtcm_end;
@@ -596,57 +593,16 @@ void __init mem_init(void)
596 593
597 /* this will put all unused low memory onto the freelists */ 594 /* this will put all unused low memory onto the freelists */
598 free_unused_memmap(&meminfo); 595 free_unused_memmap(&meminfo);
599 596 free_all_bootmem();
600 totalram_pages += free_all_bootmem();
601 597
602#ifdef CONFIG_SA1111 598#ifdef CONFIG_SA1111
603 /* now that our DMA memory is actually so designated, we can free it */ 599 /* now that our DMA memory is actually so designated, we can free it */
604 free_reserved_area(__va(PHYS_PFN_OFFSET), swapper_pg_dir, 0, NULL); 600 free_reserved_area(__va(PHYS_PFN_OFFSET), swapper_pg_dir, -1, NULL);
605#endif 601#endif
606 602
607 free_highpages(); 603 free_highpages();
608 604
609 reserved_pages = free_pages = 0; 605 mem_init_print_info(NULL);
610
611 for_each_bank(i, &meminfo) {
612 struct membank *bank = &meminfo.bank[i];
613 unsigned int pfn1, pfn2;
614 struct page *page, *end;
615
616 pfn1 = bank_pfn_start(bank);
617 pfn2 = bank_pfn_end(bank);
618
619 page = pfn_to_page(pfn1);
620 end = pfn_to_page(pfn2 - 1) + 1;
621
622 do {
623 if (PageReserved(page))
624 reserved_pages++;
625 else if (!page_count(page))
626 free_pages++;
627 page++;
628 } while (page < end);
629 }
630
631 /*
632 * Since our memory may not be contiguous, calculate the
633 * real number of pages we have in this system
634 */
635 printk(KERN_INFO "Memory:");
636 num_physpages = 0;
637 for_each_memblock(memory, reg) {
638 unsigned long pages = memblock_region_memory_end_pfn(reg) -
639 memblock_region_memory_base_pfn(reg);
640 num_physpages += pages;
641 printk(" %ldMB", pages >> (20 - PAGE_SHIFT));
642 }
643 printk(" = %luMB total\n", num_physpages >> (20 - PAGE_SHIFT));
644
645 printk(KERN_NOTICE "Memory: %luk/%luk available, %luk reserved, %luK highmem\n",
646 nr_free_pages() << (PAGE_SHIFT-10),
647 free_pages << (PAGE_SHIFT-10),
648 reserved_pages << (PAGE_SHIFT-10),
649 totalhigh_pages << (PAGE_SHIFT-10));
650 606
651#define MLK(b, t) b, t, ((t) - (b)) >> 10 607#define MLK(b, t) b, t, ((t) - (b)) >> 10
652#define MLM(b, t) b, t, ((t) - (b)) >> 20 608#define MLM(b, t) b, t, ((t) - (b)) >> 20
@@ -712,7 +668,7 @@ void __init mem_init(void)
712 BUG_ON(PKMAP_BASE + LAST_PKMAP * PAGE_SIZE > PAGE_OFFSET); 668 BUG_ON(PKMAP_BASE + LAST_PKMAP * PAGE_SIZE > PAGE_OFFSET);
713#endif 669#endif
714 670
715 if (PAGE_SIZE >= 16384 && num_physpages <= 128) { 671 if (PAGE_SIZE >= 16384 && get_num_physpages() <= 128) {
716 extern int sysctl_overcommit_memory; 672 extern int sysctl_overcommit_memory;
717 /* 673 /*
718 * On a machine this small we won't get 674 * On a machine this small we won't get
@@ -729,12 +685,12 @@ void free_initmem(void)
729 extern char __tcm_start, __tcm_end; 685 extern char __tcm_start, __tcm_end;
730 686
731 poison_init_mem(&__tcm_start, &__tcm_end - &__tcm_start); 687 poison_init_mem(&__tcm_start, &__tcm_end - &__tcm_start);
732 free_reserved_area(&__tcm_start, &__tcm_end, 0, "TCM link"); 688 free_reserved_area(&__tcm_start, &__tcm_end, -1, "TCM link");
733#endif 689#endif
734 690
735 poison_init_mem(__init_begin, __init_end - __init_begin); 691 poison_init_mem(__init_begin, __init_end - __init_begin);
736 if (!machine_is_integrator() && !machine_is_cintegrator()) 692 if (!machine_is_integrator() && !machine_is_cintegrator())
737 free_initmem_default(0); 693 free_initmem_default(-1);
738} 694}
739 695
740#ifdef CONFIG_BLK_DEV_INITRD 696#ifdef CONFIG_BLK_DEV_INITRD
@@ -745,7 +701,7 @@ void free_initrd_mem(unsigned long start, unsigned long end)
745{ 701{
746 if (!keep_initrd) { 702 if (!keep_initrd) {
747 poison_init_mem((void *)start, PAGE_ALIGN(end) - start); 703 poison_init_mem((void *)start, PAGE_ALIGN(end) - start);
748 free_reserved_area(start, end, 0, "initrd"); 704 free_reserved_area((void *)start, (void *)end, -1, "initrd");
749 } 705 }
750} 706}
751 707