83 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 *  linux/arch/cris/mm/init.c
 | 
						|
 *
 | 
						|
 *  Copyright (C) 1995  Linus Torvalds
 | 
						|
 *  Copyright (C) 2000,2001  Axis Communications AB
 | 
						|
 *
 | 
						|
 *  Authors:  Bjorn Wesen (bjornw@axis.com)
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/init.h>
 | 
						|
#include <linux/bootmem.h>
 | 
						|
#include <asm/tlb.h>
 | 
						|
 | 
						|
DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
 | 
						|
 | 
						|
unsigned long empty_zero_page;
 | 
						|
 | 
						|
extern char _stext, _edata, _etext; /* From linkerscript */
 | 
						|
extern char __init_begin, __init_end;
 | 
						|
 | 
						|
void __init
 | 
						|
mem_init(void)
 | 
						|
{
 | 
						|
	int codesize, reservedpages, datasize, initsize;
 | 
						|
	unsigned long tmp;
 | 
						|
 | 
						|
	BUG_ON(!mem_map);
 | 
						|
 | 
						|
	/* max/min_low_pfn was set by setup.c
 | 
						|
	 * now we just copy it to some other necessary places...
 | 
						|
	 *
 | 
						|
	 * high_memory was also set in setup.c
 | 
						|
	 */
 | 
						|
 | 
						|
	max_mapnr = num_physpages = max_low_pfn - min_low_pfn;
 | 
						|
 
 | 
						|
	/* this will put all memory onto the freelists */
 | 
						|
        totalram_pages = free_all_bootmem();
 | 
						|
 | 
						|
	reservedpages = 0;
 | 
						|
	for (tmp = 0; tmp < max_mapnr; tmp++) {
 | 
						|
		/*
 | 
						|
                 * Only count reserved RAM pages
 | 
						|
                 */
 | 
						|
		if (PageReserved(mem_map + tmp))
 | 
						|
			reservedpages++;
 | 
						|
	}
 | 
						|
 | 
						|
	codesize =  (unsigned long) &_etext - (unsigned long) &_stext;
 | 
						|
        datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
 | 
						|
        initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
 | 
						|
	
 | 
						|
        printk(KERN_INFO
 | 
						|
               "Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, "
 | 
						|
	       "%dk init)\n" ,
 | 
						|
	       nr_free_pages() << (PAGE_SHIFT-10),
 | 
						|
	       max_mapnr << (PAGE_SHIFT-10),
 | 
						|
	       codesize >> 10,
 | 
						|
	       reservedpages << (PAGE_SHIFT-10),
 | 
						|
	       datasize >> 10,
 | 
						|
	       initsize >> 10
 | 
						|
               );
 | 
						|
}
 | 
						|
 | 
						|
/* free the pages occupied by initialization code */
 | 
						|
 | 
						|
void 
 | 
						|
free_initmem(void)
 | 
						|
{
 | 
						|
        unsigned long addr;
 | 
						|
 | 
						|
        addr = (unsigned long)(&__init_begin);
 | 
						|
        for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
 | 
						|
                ClearPageReserved(virt_to_page(addr));
 | 
						|
                init_page_count(virt_to_page(addr));
 | 
						|
                free_page(addr);
 | 
						|
                totalram_pages++;
 | 
						|
        }
 | 
						|
        printk (KERN_INFO "Freeing unused kernel memory: %luk freed\n",
 | 
						|
		(unsigned long)((&__init_end - &__init_begin) >> 10));
 | 
						|
}
 |