-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86: unify free_init_pages() and free_initmem()
Impact: unification This patch introduces a common arch/x86/mm/init.c and moves the identical free_init_pages() and free_initmem() functions to the file. Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi> LKML-Reference: <1236078906.2675.18.camel@penberg-laptop> Signed-off-by: Ingo Molnar <mingo@elte.hu>
- Loading branch information
Pekka Enberg
authored and
Ingo Molnar
committed
Mar 3, 2009
1 parent
e087edd
commit e5b2bb5
Showing
4 changed files
with
50 additions
and
89 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#include <linux/swap.h> | ||
#include <asm/cacheflush.h> | ||
#include <asm/page.h> | ||
#include <asm/sections.h> | ||
#include <asm/system.h> | ||
|
||
void free_init_pages(char *what, unsigned long begin, unsigned long end) | ||
{ | ||
unsigned long addr = begin; | ||
|
||
if (addr >= end) | ||
return; | ||
|
||
/* | ||
* If debugging page accesses then do not free this memory but | ||
* mark them not present - any buggy init-section access will | ||
* create a kernel page fault: | ||
*/ | ||
#ifdef CONFIG_DEBUG_PAGEALLOC | ||
printk(KERN_INFO "debug: unmapping init memory %08lx..%08lx\n", | ||
begin, PAGE_ALIGN(end)); | ||
set_memory_np(begin, (end - begin) >> PAGE_SHIFT); | ||
#else | ||
/* | ||
* We just marked the kernel text read only above, now that | ||
* we are going to free part of that, we need to make that | ||
* writeable first. | ||
*/ | ||
set_memory_rw(begin, (end - begin) >> PAGE_SHIFT); | ||
|
||
printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10); | ||
|
||
for (; addr < end; addr += PAGE_SIZE) { | ||
ClearPageReserved(virt_to_page(addr)); | ||
init_page_count(virt_to_page(addr)); | ||
memset((void *)(addr & ~(PAGE_SIZE-1)), | ||
POISON_FREE_INITMEM, PAGE_SIZE); | ||
free_page(addr); | ||
totalram_pages++; | ||
} | ||
#endif | ||
} | ||
|
||
void free_initmem(void) | ||
{ | ||
free_init_pages("unused kernel memory", | ||
(unsigned long)(&__init_begin), | ||
(unsigned long)(&__init_end)); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters