Merge branch 'for-linus' of git://neil.brown.name/md
[sfrench/cifs-2.6.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/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         BUG_ON(!mem_map);
29
30         /* max/min_low_pfn was set by setup.c
31          * now we just copy it to some other necessary places...
32          *
33          * high_memory was also set in setup.c
34          */
35
36         max_mapnr = num_physpages = max_low_pfn - min_low_pfn;
37  
38         /* this will put all memory onto the freelists */
39         totalram_pages = free_all_bootmem();
40
41         reservedpages = 0;
42         for (tmp = 0; tmp < max_mapnr; tmp++) {
43                 /*
44                  * Only count reserved RAM pages
45                  */
46                 if (PageReserved(mem_map + tmp))
47                         reservedpages++;
48         }
49
50         codesize =  (unsigned long) &_etext - (unsigned long) &_stext;
51         datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
52         initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
53         
54         printk(KERN_INFO
55                "Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, "
56                "%dk init)\n" ,
57                (unsigned long) nr_free_pages() << (PAGE_SHIFT-10),
58                max_mapnr << (PAGE_SHIFT-10),
59                codesize >> 10,
60                reservedpages << (PAGE_SHIFT-10),
61                datasize >> 10,
62                initsize >> 10
63                );
64 }
65
66 /* free the pages occupied by initialization code */
67
68 void 
69 free_initmem(void)
70 {
71         unsigned long addr;
72
73         addr = (unsigned long)(&__init_begin);
74         for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
75                 ClearPageReserved(virt_to_page(addr));
76                 init_page_count(virt_to_page(addr));
77                 free_page(addr);
78                 totalram_pages++;
79         }
80         printk (KERN_INFO "Freeing unused kernel memory: %luk freed\n",
81                 (unsigned long)((&__init_end - &__init_begin) >> 10));
82 }