1/* 2 * linux/arch/cris/mm/init.c 3 * 4 * Copyright (C) 1995 Linus Torvalds 5 * Copyright (C) 2000,2001 Axis Communications AB 6 * 7 * Authors: Bjorn Wesen (bjornw@axis.com) 8 * 9 */ 10 11#include <linux/gfp.h> 12#include <linux/init.h> 13#include <linux/bootmem.h> 14#include <asm/tlb.h> 15 16DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); 17 18unsigned long empty_zero_page; 19 20extern char _stext, _edata, _etext; /* From linkerscript */ 21extern char __init_begin, __init_end; 22 23void __init 24mem_init(void) 25{ 26 int codesize, reservedpages, datasize, initsize; 27 unsigned long tmp; 28 29 BUG_ON(!mem_map); 30 31 /* max/min_low_pfn was set by setup.c 32 * now we just copy it to some other necessary places... 33 * 34 * high_memory was also set in setup.c 35 */ 36 37 max_mapnr = num_physpages = max_low_pfn - min_low_pfn; 38 39 /* this will put all memory onto the freelists */ 40 totalram_pages = free_all_bootmem(); 41 42 reservedpages = 0; 43 for (tmp = 0; tmp < max_mapnr; tmp++) { 44 /* 45 * Only count reserved RAM pages 46 */ 47 if (PageReserved(mem_map + tmp)) 48 reservedpages++; 49 } 50 51 codesize = (unsigned long) &_etext - (unsigned long) &_stext; 52 datasize = (unsigned long) &_edata - (unsigned long) &_etext; 53 initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin; 54 55 printk(KERN_INFO 56 "Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, " 57 "%dk init)\n" , 58 nr_free_pages() << (PAGE_SHIFT-10), 59 max_mapnr << (PAGE_SHIFT-10), 60 codesize >> 10, 61 reservedpages << (PAGE_SHIFT-10), 62 datasize >> 10, 63 initsize >> 10 64 ); 65} 66 67/* free the pages occupied by initialization code */ 68 69void 70free_initmem(void) 71{ 72 unsigned long addr; 73 74 addr = (unsigned long)(&__init_begin); 75 for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) { 76 ClearPageReserved(virt_to_page(addr)); 77 init_page_count(virt_to_page(addr)); 78 free_page(addr); 79 totalram_pages++; 80 } 81 printk (KERN_INFO "Freeing unused kernel memory: %luk freed\n", 82 (unsigned long)((&__init_end - &__init_begin) >> 10)); 83} 84