diff options
Diffstat (limited to 'arch/arm64')
-rw-r--r-- | arch/arm64/mm/init.c | 65 |
1 files changed, 6 insertions, 59 deletions
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index f497ca77925a..67e8d7ce3fe7 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c | |||
@@ -197,14 +197,6 @@ void __init bootmem_init(void) | |||
197 | max_pfn = max_low_pfn = max; | 197 | max_pfn = max_low_pfn = max; |
198 | } | 198 | } |
199 | 199 | ||
200 | /* | ||
201 | * Poison init memory with an undefined instruction (0x0). | ||
202 | */ | ||
203 | static inline void poison_init_mem(void *s, size_t count) | ||
204 | { | ||
205 | memset(s, 0, count); | ||
206 | } | ||
207 | |||
208 | #ifndef CONFIG_SPARSEMEM_VMEMMAP | 200 | #ifndef CONFIG_SPARSEMEM_VMEMMAP |
209 | static inline void free_memmap(unsigned long start_pfn, unsigned long end_pfn) | 201 | static inline void free_memmap(unsigned long start_pfn, unsigned long end_pfn) |
210 | { | 202 | { |
@@ -280,59 +272,17 @@ static void __init free_unused_memmap(void) | |||
280 | */ | 272 | */ |
281 | void __init mem_init(void) | 273 | void __init mem_init(void) |
282 | { | 274 | { |
283 | unsigned long reserved_pages, free_pages; | ||
284 | struct memblock_region *reg; | ||
285 | |||
286 | arm64_swiotlb_init(); | 275 | arm64_swiotlb_init(); |
287 | 276 | ||
288 | max_mapnr = pfn_to_page(max_pfn + PHYS_PFN_OFFSET) - mem_map; | 277 | max_mapnr = pfn_to_page(max_pfn + PHYS_PFN_OFFSET) - mem_map; |
289 | 278 | ||
290 | #ifndef CONFIG_SPARSEMEM_VMEMMAP | 279 | #ifndef CONFIG_SPARSEMEM_VMEMMAP |
291 | /* this will put all unused low memory onto the freelists */ | ||
292 | free_unused_memmap(); | 280 | free_unused_memmap(); |
293 | #endif | 281 | #endif |
282 | /* this will put all unused low memory onto the freelists */ | ||
283 | free_all_bootmem(); | ||
294 | 284 | ||
295 | totalram_pages += free_all_bootmem(); | 285 | mem_init_print_info(NULL); |
296 | |||
297 | reserved_pages = free_pages = 0; | ||
298 | |||
299 | for_each_memblock(memory, reg) { | ||
300 | unsigned int pfn1, pfn2; | ||
301 | struct page *page, *end; | ||
302 | |||
303 | pfn1 = __phys_to_pfn(reg->base); | ||
304 | pfn2 = pfn1 + __phys_to_pfn(reg->size); | ||
305 | |||
306 | page = pfn_to_page(pfn1); | ||
307 | end = pfn_to_page(pfn2 - 1) + 1; | ||
308 | |||
309 | do { | ||
310 | if (PageReserved(page)) | ||
311 | reserved_pages++; | ||
312 | else if (!page_count(page)) | ||
313 | free_pages++; | ||
314 | page++; | ||
315 | } while (page < end); | ||
316 | } | ||
317 | |||
318 | /* | ||
319 | * Since our memory may not be contiguous, calculate the real number | ||
320 | * of pages we have in this system. | ||
321 | */ | ||
322 | pr_info("Memory:"); | ||
323 | num_physpages = 0; | ||
324 | for_each_memblock(memory, reg) { | ||
325 | unsigned long pages = memblock_region_memory_end_pfn(reg) - | ||
326 | memblock_region_memory_base_pfn(reg); | ||
327 | num_physpages += pages; | ||
328 | printk(" %ldMB", pages >> (20 - PAGE_SHIFT)); | ||
329 | } | ||
330 | printk(" = %luMB total\n", num_physpages >> (20 - PAGE_SHIFT)); | ||
331 | |||
332 | pr_notice("Memory: %luk/%luk available, %luk reserved\n", | ||
333 | nr_free_pages() << (PAGE_SHIFT-10), | ||
334 | free_pages << (PAGE_SHIFT-10), | ||
335 | reserved_pages << (PAGE_SHIFT-10)); | ||
336 | 286 | ||
337 | #define MLK(b, t) b, t, ((t) - (b)) >> 10 | 287 | #define MLK(b, t) b, t, ((t) - (b)) >> 10 |
338 | #define MLM(b, t) b, t, ((t) - (b)) >> 20 | 288 | #define MLM(b, t) b, t, ((t) - (b)) >> 20 |
@@ -374,7 +324,7 @@ void __init mem_init(void) | |||
374 | BUILD_BUG_ON(TASK_SIZE_64 > MODULES_VADDR); | 324 | BUILD_BUG_ON(TASK_SIZE_64 > MODULES_VADDR); |
375 | BUG_ON(TASK_SIZE_64 > MODULES_VADDR); | 325 | BUG_ON(TASK_SIZE_64 > MODULES_VADDR); |
376 | 326 | ||
377 | if (PAGE_SIZE >= 16384 && num_physpages <= 128) { | 327 | if (PAGE_SIZE >= 16384 && get_num_physpages() <= 128) { |
378 | extern int sysctl_overcommit_memory; | 328 | extern int sysctl_overcommit_memory; |
379 | /* | 329 | /* |
380 | * On a machine this small we won't get anywhere without | 330 | * On a machine this small we won't get anywhere without |
@@ -386,7 +336,6 @@ void __init mem_init(void) | |||
386 | 336 | ||
387 | void free_initmem(void) | 337 | void free_initmem(void) |
388 | { | 338 | { |
389 | poison_init_mem(__init_begin, __init_end - __init_begin); | ||
390 | free_initmem_default(0); | 339 | free_initmem_default(0); |
391 | } | 340 | } |
392 | 341 | ||
@@ -396,10 +345,8 @@ static int keep_initrd; | |||
396 | 345 | ||
397 | void free_initrd_mem(unsigned long start, unsigned long end) | 346 | void free_initrd_mem(unsigned long start, unsigned long end) |
398 | { | 347 | { |
399 | if (!keep_initrd) { | 348 | if (!keep_initrd) |
400 | poison_init_mem((void *)start, PAGE_ALIGN(end) - start); | 349 | free_reserved_area((void *)start, (void *)end, 0, "initrd"); |
401 | free_reserved_area(start, end, 0, "initrd"); | ||
402 | } | ||
403 | } | 350 | } |
404 | 351 | ||
405 | static int __init keepinitrd_setup(char *__unused) | 352 | static int __init keepinitrd_setup(char *__unused) |