diff options
Diffstat (limited to 'arch/parisc/mm')
| -rw-r--r-- | arch/parisc/mm/fault.c | 3 | ||||
| -rw-r--r-- | arch/parisc/mm/init.c | 29 |
2 files changed, 10 insertions, 22 deletions
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c index bfb6dd6ab380..c6afbfc95770 100644 --- a/arch/parisc/mm/fault.c +++ b/arch/parisc/mm/fault.c | |||
| @@ -1,5 +1,4 @@ | |||
| 1 | /* $Id: fault.c,v 1.5 2000/01/26 16:20:29 jsm Exp $ | 1 | /* |
| 2 | * | ||
| 3 | * This file is subject to the terms and conditions of the GNU General Public | 2 | * This file is subject to the terms and conditions of the GNU General Public |
| 4 | * License. See the file "COPYING" in the main directory of this archive | 3 | * License. See the file "COPYING" in the main directory of this archive |
| 5 | * for more details. | 4 | * for more details. |
diff --git a/arch/parisc/mm/init.c b/arch/parisc/mm/init.c index 4356ceb1e366..b0831d9e35cb 100644 --- a/arch/parisc/mm/init.c +++ b/arch/parisc/mm/init.c | |||
| @@ -370,34 +370,22 @@ static void __init setup_bootmem(void) | |||
| 370 | 370 | ||
| 371 | void free_initmem(void) | 371 | void free_initmem(void) |
| 372 | { | 372 | { |
| 373 | unsigned long addr, init_begin, init_end; | 373 | unsigned long addr; |
| 374 | 374 | unsigned long init_begin = (unsigned long)__init_begin; | |
| 375 | printk(KERN_INFO "Freeing unused kernel memory: "); | 375 | unsigned long init_end = (unsigned long)__init_end; |
| 376 | 376 | ||
| 377 | #ifdef CONFIG_DEBUG_KERNEL | 377 | #ifdef CONFIG_DEBUG_KERNEL |
| 378 | /* Attempt to catch anyone trying to execute code here | 378 | /* Attempt to catch anyone trying to execute code here |
| 379 | * by filling the page with BRK insns. | 379 | * by filling the page with BRK insns. |
| 380 | * | ||
| 381 | * If we disable interrupts for all CPUs, then IPI stops working. | ||
| 382 | * Kinda breaks the global cache flushing. | ||
| 383 | */ | 380 | */ |
| 384 | local_irq_disable(); | 381 | memset((void *)init_begin, 0x00, init_end - init_begin); |
| 385 | 382 | flush_icache_range(init_begin, init_end); | |
| 386 | memset(__init_begin, 0x00, | ||
| 387 | (unsigned long)__init_end - (unsigned long)__init_begin); | ||
| 388 | |||
| 389 | flush_data_cache(); | ||
| 390 | asm volatile("sync" : : ); | ||
| 391 | flush_icache_range((unsigned long)__init_begin, (unsigned long)__init_end); | ||
| 392 | asm volatile("sync" : : ); | ||
| 393 | |||
| 394 | local_irq_enable(); | ||
| 395 | #endif | 383 | #endif |
| 396 | 384 | ||
| 397 | /* align __init_begin and __init_end to page size, | 385 | /* align __init_begin and __init_end to page size, |
| 398 | ignoring linker script where we might have tried to save RAM */ | 386 | ignoring linker script where we might have tried to save RAM */ |
| 399 | init_begin = PAGE_ALIGN((unsigned long)(__init_begin)); | 387 | init_begin = PAGE_ALIGN(init_begin); |
| 400 | init_end = PAGE_ALIGN((unsigned long)(__init_end)); | 388 | init_end = PAGE_ALIGN(init_end); |
| 401 | for (addr = init_begin; addr < init_end; addr += PAGE_SIZE) { | 389 | for (addr = init_begin; addr < init_end; addr += PAGE_SIZE) { |
| 402 | ClearPageReserved(virt_to_page(addr)); | 390 | ClearPageReserved(virt_to_page(addr)); |
| 403 | init_page_count(virt_to_page(addr)); | 391 | init_page_count(virt_to_page(addr)); |
| @@ -409,7 +397,8 @@ void free_initmem(void) | |||
| 409 | /* set up a new led state on systems shipped LED State panel */ | 397 | /* set up a new led state on systems shipped LED State panel */ |
| 410 | pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE); | 398 | pdc_chassis_send_status(PDC_CHASSIS_DIRECT_BCOMPLETE); |
| 411 | 399 | ||
| 412 | printk("%luk freed\n", (init_end - init_begin) >> 10); | 400 | printk(KERN_INFO "Freeing unused kernel memory: %luk freed\n", |
| 401 | (init_end - init_begin) >> 10); | ||
| 413 | } | 402 | } |
| 414 | 403 | ||
| 415 | 404 | ||
