diff options
Diffstat (limited to 'arch/arm/mm')
-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 |