Merge branch 'x86-microcode-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / arch / cris / mm / init.c
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
16 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
17
18 unsigned long empty_zero_page;
19
20 extern char _stext, _edata, _etext; /* From linkerscript */
21 extern char __init_begin, __init_end;
22
23 void __init
24 mem_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
69 void 
70 free_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 }