diff -Nur -x.svn linux-2.6.18-orig/arch/arm/mm/init.c linux-2.6.18/arch/arm/mm/init.c --- linux-2.6.18-orig/arch/arm/mm/init.c 2008-01-23 15:19:48.000000000 +0900 +++ linux-2.6.18/arch/arm/mm/init.c 2008-01-08 09:52:47.000000000 +0900 @@ -606,6 +606,12 @@ { unsigned int codepages, datapages, initpages; int i, node; +#ifdef CONFIG_CABI_MEM + extern unsigned int cabi_mem_total_mem_kb; + extern unsigned int cabi_mem_total_page; + extern unsigned int cabi_mem_reserved_pages; + int reserved = 0; +#endif codepages = &_etext - &_text; datapages = &_end - &__data_start; @@ -657,6 +663,24 @@ */ sysctl_overcommit_memory = OVERCOMMIT_ALWAYS; } +#ifdef CONFIG_CABI_MEM + /* Counting reserved pages */ + for_each_online_node(node) { + struct page *page, *end; + + page = NODE_MEM_MAP(node); + end = page + NODE_DATA(node)->node_spanned_pages; + + do { + if (PageReserved(page)) + reserved++; + page++; + } while (page < end); + } + cabi_mem_total_mem_kb = num_physpages << (PAGE_SHIFT-10); + cabi_mem_total_page = num_physpages; + cabi_mem_reserved_pages = reserved; +#endif } void free_initmem(void)