linux/arch/cris/mm/init.c
<<
>>
Prefs
   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
  15DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
  16
  17unsigned long empty_zero_page;
  18
  19extern char _stext, _edata, _etext; /* From linkerscript */
  20extern char __init_begin, __init_end;
  21
  22void __init
  23mem_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
  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