aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/mm/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/mm/init.c')
-rw-r--r--arch/mips/mm/init.c57
1 files changed, 18 insertions, 39 deletions
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index e7333f15b1b7..4e73f10a7519 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -359,11 +359,24 @@ void __init paging_init(void)
359static struct kcore_list kcore_kseg0; 359static struct kcore_list kcore_kseg0;
360#endif 360#endif
361 361
362void __init mem_init(void) 362static inline void mem_init_free_highmem(void)
363{ 363{
364 unsigned long codesize, reservedpages, datasize, initsize; 364#ifdef CONFIG_HIGHMEM
365 unsigned long tmp, ram; 365 unsigned long tmp;
366 366
367 for (tmp = highstart_pfn; tmp < highend_pfn; tmp++) {
368 struct page *page = pfn_to_page(tmp);
369
370 if (!page_is_ram(tmp))
371 SetPageReserved(page);
372 else
373 free_highmem_page(page);
374 }
375#endif
376}
377
378void __init mem_init(void)
379{
367#ifdef CONFIG_HIGHMEM 380#ifdef CONFIG_HIGHMEM
368#ifdef CONFIG_DISCONTIGMEM 381#ifdef CONFIG_DISCONTIGMEM
369#error "CONFIG_HIGHMEM and CONFIG_DISCONTIGMEM dont work together yet" 382#error "CONFIG_HIGHMEM and CONFIG_DISCONTIGMEM dont work together yet"
@@ -376,32 +389,8 @@ void __init mem_init(void)
376 389
377 free_all_bootmem(); 390 free_all_bootmem();
378 setup_zero_pages(); /* Setup zeroed pages. */ 391 setup_zero_pages(); /* Setup zeroed pages. */
379 392 mem_init_free_highmem();
380 reservedpages = ram = 0; 393 mem_init_print_info(NULL);
381 for (tmp = 0; tmp < max_low_pfn; tmp++)
382 if (page_is_ram(tmp) && pfn_valid(tmp)) {
383 ram++;
384 if (PageReserved(pfn_to_page(tmp)))
385 reservedpages++;
386 }
387 num_physpages = ram;
388
389#ifdef CONFIG_HIGHMEM
390 for (tmp = highstart_pfn; tmp < highend_pfn; tmp++) {
391 struct page *page = pfn_to_page(tmp);
392
393 if (!page_is_ram(tmp)) {
394 SetPageReserved(page);
395 continue;
396 }
397 free_highmem_page(page);
398 }
399 num_physpages += totalhigh_pages;
400#endif
401
402 codesize = (unsigned long) &_etext - (unsigned long) &_text;
403 datasize = (unsigned long) &_edata - (unsigned long) &_etext;
404 initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;
405 394
406#ifdef CONFIG_64BIT 395#ifdef CONFIG_64BIT
407 if ((unsigned long) &_text > (unsigned long) CKSEG0) 396 if ((unsigned long) &_text > (unsigned long) CKSEG0)
@@ -410,16 +399,6 @@ void __init mem_init(void)
410 kclist_add(&kcore_kseg0, (void *) CKSEG0, 399 kclist_add(&kcore_kseg0, (void *) CKSEG0,
411 0x80000000 - 4, KCORE_TEXT); 400 0x80000000 - 4, KCORE_TEXT);
412#endif 401#endif
413
414 printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, "
415 "%ldk reserved, %ldk data, %ldk init, %ldk highmem)\n",
416 nr_free_pages() << (PAGE_SHIFT-10),
417 ram << (PAGE_SHIFT-10),
418 codesize >> 10,
419 reservedpages << (PAGE_SHIFT-10),
420 datasize >> 10,
421 initsize >> 10,
422 totalhigh_pages << (PAGE_SHIFT-10));
423} 402}
424#endif /* !CONFIG_NEED_MULTIPLE_NODES */ 403#endif /* !CONFIG_NEED_MULTIPLE_NODES */
425 404