init.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * linux/arch/cris/mm/init.c
  3. *
  4. * Copyright (C) 1995 Linus Torvalds
  5. * Copyright (C) 2000,2001 Axis Communications AB
  6. *
  7. * Authors: Bjorn Wesen (bjornw@axis.com)
  8. *
  9. */
  10. #include <linux/gfp.h>
  11. #include <linux/init.h>
  12. #include <linux/bootmem.h>
  13. #include <asm/tlb.h>
  14. DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
  15. unsigned long empty_zero_page;
  16. extern char _stext, _edata, _etext; /* From linkerscript */
  17. extern char __init_begin, __init_end;
  18. void __init
  19. mem_init(void)
  20. {
  21. int codesize, reservedpages, datasize, initsize;
  22. unsigned long tmp;
  23. BUG_ON(!mem_map);
  24. /* max/min_low_pfn was set by setup.c
  25. * now we just copy it to some other necessary places...
  26. *
  27. * high_memory was also set in setup.c
  28. */
  29. max_mapnr = num_physpages = max_low_pfn - min_low_pfn;
  30. /* this will put all memory onto the freelists */
  31. totalram_pages = free_all_bootmem();
  32. reservedpages = 0;
  33. for (tmp = 0; tmp < max_mapnr; tmp++) {
  34. /*
  35. * Only count reserved RAM pages
  36. */
  37. if (PageReserved(mem_map + tmp))
  38. reservedpages++;
  39. }
  40. codesize = (unsigned long) &_etext - (unsigned long) &_stext;
  41. datasize = (unsigned long) &_edata - (unsigned long) &_etext;
  42. initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;
  43. printk(KERN_INFO
  44. "Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, "
  45. "%dk init)\n" ,
  46. nr_free_pages() << (PAGE_SHIFT-10),
  47. max_mapnr << (PAGE_SHIFT-10),
  48. codesize >> 10,
  49. reservedpages << (PAGE_SHIFT-10),
  50. datasize >> 10,
  51. initsize >> 10
  52. );
  53. }
  54. /* free the pages occupied by initialization code */
  55. void
  56. free_initmem(void)
  57. {
  58. unsigned long addr;
  59. addr = (unsigned long)(&__init_begin);
  60. for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
  61. ClearPageReserved(virt_to_page(addr));
  62. init_page_count(virt_to_page(addr));
  63. free_page(addr);
  64. totalram_pages++;
  65. }
  66. printk (KERN_INFO "Freeing unused kernel memory: %luk freed\n",
  67. (unsigned long)((&__init_end - &__init_begin) >> 10));
  68. }