diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-04-05 11:23:36 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-04-05 11:23:36 +0000 |
commit | 4318fbda2a7ee51caafdc4eb1f8028a3f0605142 (patch) | |
tree | cddb50a81d7d1a628cc400519162080c6d87868e /arch/mips/mm/init.c | |
parent | 36ea5120664550fae6d31f1c6f695e4f8975cb06 (diff) |
o Merge with Linux 2.1.91.
o First round of bugfixes for the SC/MC CPUs.
o FPU context switch fixes.
o Lazy context switches.
o Faster syscalls.
o Removed dead code.
o Shitloads of other things I forgot ...
Diffstat (limited to 'arch/mips/mm/init.c')
-rw-r--r-- | arch/mips/mm/init.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index 3e309e438..dd2fcbad2 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c @@ -5,9 +5,10 @@ * * Copyright (C) 1994, 1995, 1996 by Ralf Baechle * - * $Id: init.c,v 1.4 1998/03/21 08:01:45 ralf Exp $ + * $Id: init.c,v 1.4 1998/03/22 23:27:15 ralf Exp $ */ #include <linux/config.h> +#include <linux/init.h> #include <linux/signal.h> #include <linux/sched.h> #include <linux/head.h> @@ -155,13 +156,13 @@ void show_mem(void) extern unsigned long free_area_init(unsigned long, unsigned long); -unsigned long paging_init(unsigned long start_mem, unsigned long end_mem) +__initfunc(unsigned long paging_init(unsigned long start_mem, unsigned long end_mem)) { pgd_init((unsigned long)swapper_pg_dir); return free_area_init(start_mem, end_mem); } -void mem_init(unsigned long start_mem, unsigned long end_mem) +__initfunc(void mem_init(unsigned long start_mem, unsigned long end_mem)) { int codepages = 0; int datapages = 0; @@ -178,7 +179,7 @@ void mem_init(unsigned long start_mem, unsigned long end_mem) high_memory = (void *)end_mem; /* clear the zero-page */ - clear_page(empty_zero_page); + clear_page((unsigned long)empty_zero_page); /* mark usable pages in the mem_map[] */ start_mem = PAGE_ALIGN(start_mem); @@ -225,9 +226,20 @@ void mem_init(unsigned long start_mem, unsigned long end_mem) return; } +extern char __init_begin, __init_end; + void free_initmem(void) { - /* To be written */ + unsigned long addr; + + addr = (unsigned long)(&__init_begin); + for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) { + mem_map[MAP_NR(addr)].flags &= ~(1 << PG_reserved); + atomic_set(&mem_map[MAP_NR(addr)].count, 1); + free_page(addr); + } + printk("Freeing unused kernel memory: %dk freed\n", + (&__init_end - &__init_begin) >> 10); } void si_meminfo(struct sysinfo *val) |