Merge branches 'x86/prototypes', 'x86/x2apic' and 'x86/debug' into x86/core
[linux-2.6] / 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/init.h>
12 #include <linux/bootmem.h>
13 #include <asm/tlb.h>
14
15 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
16
17 unsigned long empty_zero_page;
18
19 extern char _stext, _edata, _etext; /* From linkerscript */
20 extern char __init_begin, __init_end;
21
22 void __init
23 mem_init(void)
24 {
25         int codesize, reservedpages, datasize, initsize;
26         unsigned long tmp;
27
28         if(!mem_map)
29                 BUG();
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                (unsigned long) 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 }