diff options
| author | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-12-06 12:00:33 -0500 |
|---|---|---|
| committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-12-06 12:00:33 -0500 |
| commit | 3d14b5beba35250c548d3851a2b84fce742d8311 (patch) | |
| tree | 065e3d93c3fcbc5ee4c44fa78662393cddbdf6de /mm/bootmem.c | |
| parent | 0719dc341389882cc834ed18fc9b7fc6006b2b85 (diff) | |
| parent | 1bf8e6219552d5dd27012d567ec8c4bb9c2d86b4 (diff) | |
Merge branch 'sa1100' into devel
Diffstat (limited to 'mm/bootmem.c')
| -rw-r--r-- | mm/bootmem.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/mm/bootmem.c b/mm/bootmem.c index 555d5d2731c6..d1dc23cc7f10 100644 --- a/mm/bootmem.c +++ b/mm/bootmem.c | |||
| @@ -143,6 +143,30 @@ unsigned long __init init_bootmem(unsigned long start, unsigned long pages) | |||
| 143 | return init_bootmem_core(NODE_DATA(0)->bdata, start, 0, pages); | 143 | return init_bootmem_core(NODE_DATA(0)->bdata, start, 0, pages); |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | /* | ||
| 147 | * free_bootmem_late - free bootmem pages directly to page allocator | ||
| 148 | * @addr: starting address of the range | ||
| 149 | * @size: size of the range in bytes | ||
| 150 | * | ||
| 151 | * This is only useful when the bootmem allocator has already been torn | ||
| 152 | * down, but we are still initializing the system. Pages are given directly | ||
| 153 | * to the page allocator, no bootmem metadata is updated because it is gone. | ||
| 154 | */ | ||
| 155 | void __init free_bootmem_late(unsigned long addr, unsigned long size) | ||
| 156 | { | ||
| 157 | unsigned long cursor, end; | ||
| 158 | |||
| 159 | kmemleak_free_part(__va(addr), size); | ||
| 160 | |||
| 161 | cursor = PFN_UP(addr); | ||
| 162 | end = PFN_DOWN(addr + size); | ||
| 163 | |||
| 164 | for (; cursor < end; cursor++) { | ||
| 165 | __free_pages_bootmem(pfn_to_page(cursor), 0); | ||
| 166 | totalram_pages++; | ||
| 167 | } | ||
| 168 | } | ||
| 169 | |||
| 146 | static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata) | 170 | static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata) |
| 147 | { | 171 | { |
| 148 | int aligned; | 172 | int aligned; |
