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        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               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
  68void 
  69free_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}
  83