diff options
Diffstat (limited to 'arch/arm/mm/init.c')
| -rw-r--r-- | arch/arm/mm/init.c | 61 |
1 files changed, 34 insertions, 27 deletions
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 22217fe2650b..b5814b4b6f35 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
| @@ -32,40 +32,51 @@ extern unsigned long phys_initrd_start; | |||
| 32 | extern unsigned long phys_initrd_size; | 32 | extern unsigned long phys_initrd_size; |
| 33 | 33 | ||
| 34 | /* | 34 | /* |
| 35 | * The sole use of this is to pass memory configuration | 35 | * This is used to pass memory configuration data from paging_init |
| 36 | * data from paging_init to mem_init. | 36 | * to mem_init, and by show_mem() to skip holes in the memory map. |
| 37 | */ | 37 | */ |
| 38 | static struct meminfo meminfo __initdata = { 0, }; | 38 | static struct meminfo meminfo = { 0, }; |
| 39 | |||
| 40 | #define for_each_nodebank(iter,mi,no) \ | ||
| 41 | for (iter = 0; iter < mi->nr_banks; iter++) \ | ||
| 42 | if (mi->bank[iter].node == no) | ||
| 39 | 43 | ||
| 40 | void show_mem(void) | 44 | void show_mem(void) |
| 41 | { | 45 | { |
| 42 | int free = 0, total = 0, reserved = 0; | 46 | int free = 0, total = 0, reserved = 0; |
| 43 | int shared = 0, cached = 0, slab = 0, node; | 47 | int shared = 0, cached = 0, slab = 0, node, i; |
| 48 | struct meminfo * mi = &meminfo; | ||
| 44 | 49 | ||
| 45 | printk("Mem-info:\n"); | 50 | printk("Mem-info:\n"); |
| 46 | show_free_areas(); | 51 | show_free_areas(); |
| 47 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); | 52 | printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); |
| 48 | 53 | ||
| 49 | for_each_online_node(node) { | 54 | for_each_online_node(node) { |
| 50 | struct page *page, *end; | 55 | for_each_nodebank (i,mi,node) { |
| 51 | 56 | unsigned int pfn1, pfn2; | |
| 52 | page = NODE_MEM_MAP(node); | 57 | struct page *page, *end; |
| 53 | end = page + NODE_DATA(node)->node_spanned_pages; | 58 | |
| 54 | 59 | pfn1 = mi->bank[i].start >> PAGE_SHIFT; | |
| 55 | do { | 60 | pfn2 = (mi->bank[i].size + mi->bank[i].start) >> PAGE_SHIFT; |
| 56 | total++; | 61 | |
| 57 | if (PageReserved(page)) | 62 | page = NODE_MEM_MAP(node) + pfn1; |
| 58 | reserved++; | 63 | end = NODE_MEM_MAP(node) + pfn2; |
| 59 | else if (PageSwapCache(page)) | 64 | |
| 60 | cached++; | 65 | do { |
| 61 | else if (PageSlab(page)) | 66 | total++; |
| 62 | slab++; | 67 | if (PageReserved(page)) |
| 63 | else if (!page_count(page)) | 68 | reserved++; |
| 64 | free++; | 69 | else if (PageSwapCache(page)) |
| 65 | else | 70 | cached++; |
| 66 | shared += page_count(page) - 1; | 71 | else if (PageSlab(page)) |
| 67 | page++; | 72 | slab++; |
| 68 | } while (page < end); | 73 | else if (!page_count(page)) |
| 74 | free++; | ||
| 75 | else | ||
| 76 | shared += page_count(page) - 1; | ||
| 77 | page++; | ||
| 78 | } while (page < end); | ||
| 79 | } | ||
| 69 | } | 80 | } |
| 70 | 81 | ||
| 71 | printk("%d pages of RAM\n", total); | 82 | printk("%d pages of RAM\n", total); |
| @@ -76,10 +87,6 @@ void show_mem(void) | |||
| 76 | printk("%d pages swap cached\n", cached); | 87 | printk("%d pages swap cached\n", cached); |
| 77 | } | 88 | } |
| 78 | 89 | ||
| 79 | #define for_each_nodebank(iter,mi,no) \ | ||
| 80 | for (iter = 0; iter < mi->nr_banks; iter++) \ | ||
| 81 | if (mi->bank[iter].node == no) | ||
| 82 | |||
| 83 | /* | 90 | /* |
| 84 | * FIXME: We really want to avoid allocating the bootmap bitmap | 91 | * FIXME: We really want to avoid allocating the bootmap bitmap |
| 85 | * over the top of the initrd. Hopefully, this is located towards | 92 | * over the top of the initrd. Hopefully, this is located towards |
