init.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. unsigned long empty_zero_page;
  15. extern char _stext, _edata, _etext; /* From linkerscript */
  16. extern char __init_begin, __init_end;
  17. void __init
  18. mem_init(void)
  19. {
  20. int codesize, reservedpages, datasize, initsize;
  21. unsigned long tmp;
  22. BUG_ON(!mem_map);
  23. /* max/min_low_pfn was set by setup.c
  24. * now we just copy it to some other necessary places...
  25. *
  26. * high_memory was also set in setup.c
  27. */
  28. max_mapnr = num_physpages = max_low_pfn - min_low_pfn;
  29. /* this will put all memory onto the freelists */
  30. totalram_pages = free_all_bootmem();
  31. reservedpages = 0;
  32. for (tmp = 0; tmp < max_mapnr; tmp++) {
  33. /*
  34. * Only count reserved RAM pages
  35. */
  36. if (PageReserved(mem_map + tmp))
  37. reservedpages++;
  38. }
  39. codesize = (unsigned long) &_etext - (unsigned long) &_stext;
  40. datasize = (unsigned long) &_edata - (unsigned long) &_etext;
  41. initsize = (unsigned long) &__init_end - (unsigned long) &__init_begin;
  42. printk(KERN_INFO
  43. "Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, "
  44. "%dk init)\n" ,
  45. nr_free_pages() << (PAGE_SHIFT-10),
  46. max_mapnr << (PAGE_SHIFT-10),
  47. codesize >> 10,
  48. reservedpages << (PAGE_SHIFT-10),
  49. datasize >> 10,
  50. initsize >> 10
  51. );
  52. }
  53. /* free the pages occupied by initialization code */
  54. void
  55. free_initmem(void)
  56. {
  57. unsigned long addr;
  58. addr = (unsigned long)(&__init_begin);
  59. for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
  60. ClearPageReserved(virt_to_page(addr));
  61. init_page_count(virt_to_page(addr));
  62. free_page(addr);
  63. totalram_pages++;
  64. }
  65. printk (KERN_INFO "Freeing unused kernel memory: %luk freed\n",
  66. (unsigned long)((&__init_end - &__init_begin) >> 10));
  67. }