diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-04-20 18:36:05 -0400 | 
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-04-20 18:36:05 -0400 | 
| commit | 857c68f733eea07f11a061caea43a38fed61adb7 (patch) | |
| tree | 4567a9e91f717b22143ac1ccb0fb5323ac15afd3 /arch/mips/mm/init.c | |
| parent | 4741c336d27dec3ea68a35659abb8dc82b142388 (diff) | |
| parent | 402a26f0c040077ed6f941eefac5a6971f0d5f40 (diff) | |
Merge branch 'master'
Diffstat (limited to 'arch/mips/mm/init.c')
| -rw-r--r-- | arch/mips/mm/init.c | 48 | 
1 files changed, 23 insertions, 25 deletions
| diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c index ad89c442f299..c22308b93ff0 100644 --- a/arch/mips/mm/init.c +++ b/arch/mips/mm/init.c | |||
| @@ -276,6 +276,20 @@ void __init mem_init(void) | |||
| 276 | } | 276 | } | 
| 277 | #endif /* !CONFIG_NEED_MULTIPLE_NODES */ | 277 | #endif /* !CONFIG_NEED_MULTIPLE_NODES */ | 
| 278 | 278 | ||
| 279 | void free_init_pages(char *what, unsigned long begin, unsigned long end) | ||
| 280 | { | ||
| 281 | unsigned long addr; | ||
| 282 | |||
| 283 | for (addr = begin; addr < end; addr += PAGE_SIZE) { | ||
| 284 | ClearPageReserved(virt_to_page(addr)); | ||
| 285 | init_page_count(virt_to_page(addr)); | ||
| 286 | memset((void *)addr, 0xcc, PAGE_SIZE); | ||
| 287 | free_page(addr); | ||
| 288 | totalram_pages++; | ||
| 289 | } | ||
| 290 | printk(KERN_INFO "Freeing %s: %ldk freed\n", what, (end - begin) >> 10); | ||
| 291 | } | ||
| 292 | |||
| 279 | #ifdef CONFIG_BLK_DEV_INITRD | 293 | #ifdef CONFIG_BLK_DEV_INITRD | 
| 280 | void free_initrd_mem(unsigned long start, unsigned long end) | 294 | void free_initrd_mem(unsigned long start, unsigned long end) | 
| 281 | { | 295 | { | 
| @@ -284,16 +298,7 @@ void free_initrd_mem(unsigned long start, unsigned long end) | |||
| 284 | start = (unsigned long)phys_to_virt(CPHYSADDR(start)); | 298 | start = (unsigned long)phys_to_virt(CPHYSADDR(start)); | 
| 285 | end = (unsigned long)phys_to_virt(CPHYSADDR(end)); | 299 | end = (unsigned long)phys_to_virt(CPHYSADDR(end)); | 
| 286 | #endif | 300 | #endif | 
| 287 | if (start < end) | 301 | free_init_pages("initrd memory", start, end); | 
| 288 | printk(KERN_INFO "Freeing initrd memory: %ldk freed\n", | ||
| 289 | (end - start) >> 10); | ||
| 290 | |||
| 291 | for (; start < end; start += PAGE_SIZE) { | ||
| 292 | ClearPageReserved(virt_to_page(start)); | ||
| 293 | init_page_count(virt_to_page(start)); | ||
| 294 | free_page(start); | ||
| 295 | totalram_pages++; | ||
| 296 | } | ||
| 297 | } | 302 | } | 
| 298 | #endif | 303 | #endif | 
| 299 | 304 | ||
| @@ -301,24 +306,17 @@ extern unsigned long prom_free_prom_memory(void); | |||
| 301 | 306 | ||
| 302 | void free_initmem(void) | 307 | void free_initmem(void) | 
| 303 | { | 308 | { | 
| 304 | unsigned long addr, page, freed; | 309 | unsigned long start, end, freed; | 
| 305 | 310 | ||
| 306 | freed = prom_free_prom_memory(); | 311 | freed = prom_free_prom_memory(); | 
| 312 | if (freed) | ||
| 313 | printk(KERN_INFO "Freeing firmware memory: %ldk freed\n",freed); | ||
| 307 | 314 | ||
| 308 | addr = (unsigned long) &__init_begin; | 315 | start = (unsigned long)(&__init_begin); | 
| 309 | while (addr < (unsigned long) &__init_end) { | 316 | end = (unsigned long)(&__init_end); | 
| 310 | #ifdef CONFIG_64BIT | 317 | #ifdef CONFIG_64BIT | 
| 311 | page = PAGE_OFFSET | CPHYSADDR(addr); | 318 | start = PAGE_OFFSET | CPHYSADDR(start); | 
| 312 | #else | 319 | end = PAGE_OFFSET | CPHYSADDR(end); | 
| 313 | page = addr; | ||
| 314 | #endif | 320 | #endif | 
| 315 | ClearPageReserved(virt_to_page(page)); | 321 | free_init_pages("unused kernel memory", start, end); | 
| 316 | init_page_count(virt_to_page(page)); | ||
| 317 | free_page(page); | ||
| 318 | totalram_pages++; | ||
| 319 | freed += PAGE_SIZE; | ||
| 320 | addr += PAGE_SIZE; | ||
| 321 | } | ||
| 322 | printk(KERN_INFO "Freeing unused kernel memory: %ldk freed\n", | ||
| 323 | freed >> 10); | ||
| 324 | } | 322 | } | 
