mm: concentrate modification of totalram_pages into the mm core
authorJiang Liu <liuj97@gmail.com>
Wed, 3 Jul 2013 22:03:24 +0000 (15:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 3 Jul 2013 23:07:33 +0000 (16:07 -0700)
Concentrate code to modify totalram_pages into the mm core, so the arch
memory initialized code doesn't need to take care of it.  With these
changes applied, only following functions from mm core modify global
variable totalram_pages: free_bootmem_late(), free_all_bootmem(),
free_all_bootmem_node(), adjust_managed_page_count().

With this patch applied, it will be much more easier for us to keep
totalram_pages and zone->managed_pages in consistence.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Acked-by: David Howells <dhowells@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: <sworddragon2@aol.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Jianguo Wu <wujianguo@huawei.com>
Cc: Joonsoo Kim <js1304@gmail.com>
Cc: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Michel Lespinasse <walken@google.com>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Tang Chen <tangchen@cn.fujitsu.com>
Cc: Tejun Heo <tj@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Wen Congyang <wency@cn.fujitsu.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
36 files changed:
arch/alpha/mm/init.c
arch/alpha/mm/numa.c
arch/arc/mm/init.c
arch/arm/mm/init.c
arch/arm64/mm/init.c
arch/avr32/mm/init.c
arch/blackfin/mm/init.c
arch/c6x/mm/init.c
arch/cris/mm/init.c
arch/frv/mm/init.c
arch/h8300/mm/init.c
arch/hexagon/mm/init.c
arch/ia64/mm/init.c
arch/m32r/mm/init.c
arch/m68k/mm/init.c
arch/metag/mm/init.c
arch/microblaze/mm/init.c
arch/mips/mm/init.c
arch/mips/sgi-ip27/ip27-memory.c
arch/mn10300/mm/init.c
arch/openrisc/mm/init.c
arch/parisc/mm/init.c
arch/powerpc/mm/mem.c
arch/s390/mm/init.c
arch/score/mm/init.c
arch/sh/mm/init.c
arch/sparc/mm/init_32.c
arch/sparc/mm/init_64.c
arch/tile/mm/init.c
arch/um/kernel/mem.c
arch/unicore32/mm/init.c
arch/x86/mm/init_32.c
arch/x86/mm/init_64.c
arch/xtensa/mm/init.c
mm/bootmem.c
mm/nobootmem.c

index 218c29c14bb3eefbc9680c15bcc1172792a11365..eee47a453d7d58810ae6b12c1dfb5d03a6c6aa2a 100644 (file)
@@ -309,7 +309,7 @@ void __init
 mem_init(void)
 {
        max_mapnr = num_physpages = max_low_pfn;
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
        high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
 
        printk_memory_info();
index 33885048fa3680cce1775bfc11a36e229a69c98e..857452c13c4d41535cbc0cf31480b380e1b906c2 100644 (file)
@@ -334,7 +334,7 @@ void __init mem_init(void)
                /*
                 * This will free up the bootmem, ie, slot 0 memory
                 */
-               totalram_pages += free_all_bootmem_node(NODE_DATA(nid));
+               free_all_bootmem_node(NODE_DATA(nid));
 
                pfn = NODE_DATA(nid)->node_start_pfn;
                for (i = 0; i < node_spanned_pages(nid); i++, pfn++)
index f9c707712096dcae406dbff8fc5d32ecf25f245c..c668a600f652b7f85ace70c698eb023cc06541fc 100644 (file)
@@ -111,7 +111,7 @@ void __init mem_init(void)
 
        high_memory = (void *)(CONFIG_LINUX_LINK_BASE + arc_mem_sz);
 
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
        /* count all reserved pages [kernel code/data/mem_map..] */
        reserved_pages = 0;
index 2070651c1bb4adeed368598456392d8a6c625546..06e9ce17d1d28869581ee8b0d13772bb951ee1ea 100644 (file)
@@ -596,8 +596,7 @@ void __init mem_init(void)
 
        /* this will put all unused low memory onto the freelists */
        free_unused_memmap(&meminfo);
-
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 
 #ifdef CONFIG_SA1111
        /* now that our DMA memory is actually so designated, we can free it */
index a398eb9018bbbe3f80048be489f5a1d02653095f..93de98afedd77494b3ed499302ae9f16172c2a6a 100644 (file)
@@ -284,7 +284,7 @@ void __init mem_init(void)
        free_unused_memmap();
 #endif
 
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 
        reserved_pages = free_pages = 0;
 
index b079e04f695446d1e9364d49d39d88f5620412f4..af6890fd731912d045ae152ddd71742881105077 100644 (file)
@@ -117,8 +117,6 @@ void __init mem_init(void)
                if (pgdat->node_spanned_pages != 0)
                        node_pages = free_all_bootmem_node(pgdat);
 
-               totalram_pages += node_pages;
-
                for (i = 0; i < node_pages; i++)
                        if (PageReserved(pgdat->node_mem_map + i))
                                reservedpages++;
index fa241f5a7dcf1f50b99b468ba7f6d8231c1d745b..c73d80ef564fe90b1ed9b24fb2c4c226e9111a74 100644 (file)
@@ -104,7 +104,7 @@ void __init mem_init(void)
        printk(KERN_DEBUG "Kernel managed physical pages: %lu\n", num_physpages);
 
        /* This will put all low memory onto the freelists. */
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
        reservedpages = 0;
        for (tmp = ARCH_PFN_OFFSET; tmp < max_mapnr; tmp++)
index 3987a20fdee6891a45d2360723c45cc646785e38..c9ae8ce731d56de1cb42c6dfa2f9fa9378562b5a 100644 (file)
@@ -65,7 +65,7 @@ void __init mem_init(void)
        high_memory = (void *)(memory_end & PAGE_MASK);
 
        /* this will put all memory onto the freelists */
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
        codek = (_etext - _stext) >> 10;
        datak = (_end - _sdata) >> 10;
index 8fec26392ae71f00381e209d5f58bc7ae2a8e234..52b8b56ae305519d0937c1f1e50fd549efc43140 100644 (file)
@@ -33,7 +33,7 @@ mem_init(void)
        max_mapnr = num_physpages = max_low_pfn - min_low_pfn;
  
        /* this will put all memory onto the freelists */
-        totalram_pages = free_all_bootmem();
+        free_all_bootmem();
 
        reservedpages = 0;
        for (tmp = 0; tmp < max_mapnr; tmp++) {
index 8ba9d22d0d916c600b58a0abc116cf8f1c7fa2e3..3dcc88803a4fa781a4b9a651bac42ea29e7c2f2d 100644 (file)
@@ -123,7 +123,7 @@ void __init mem_init(void)
        int codek = 0, datak = 0;
 
        /* this will put all low memory onto the freelists */
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
 #ifdef CONFIG_MMU
        for (loop = 0 ; loop < npages ; loop++)
index c831f1dba1324f77b38a005059cd58cb448d6619..a506dd4724e0288a2e3d9ac528c04a82bea384d4 100644 (file)
@@ -140,7 +140,7 @@ void __init mem_init(void)
        max_mapnr = num_physpages = MAP_NR(high_memory);
 
        /* this will put all low memory onto the freelists */
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
        codek = (_etext - _stext) >> 10;
        datak = (__bss_stop - _sdata) >> 10;
index 2561d259a2967f296130ea0393e71f5edabec2d1..0ab5b4350e937723e6f7b194874f1c755584d603 100644 (file)
@@ -70,7 +70,7 @@ unsigned long long kmap_generation;
 void __init mem_init(void)
 {
        /*  No idea where this is actually declared.  Seems to evade LXR.  */
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
        num_physpages = bootmem_lastpg-ARCH_PFN_OFFSET;
 
        printk(KERN_INFO "totalram_pages = %ld\n", totalram_pages);
index f8a4f38b0ad580c035447d7cb87f27e2192fcf97..d141f7ea0be5611f444501bedd2a1bd7ef33ca53 100644 (file)
@@ -622,7 +622,7 @@ mem_init (void)
 
        for_each_online_pgdat(pgdat)
                if (pgdat->bdata->node_bootmem_map)
-                       totalram_pages += free_all_bootmem_node(pgdat);
+                       free_all_bootmem_node(pgdat);
 
        reserved_pages = 0;
        efi_memmap_walk(count_reserved_pages, &reserved_pages);
index cca87d9184368490a7df81b9d564492f5edc9408..a501838233abb5aa9bcc281a24e683dd9fa2935f 100644 (file)
@@ -158,7 +158,7 @@ void __init mem_init(void)
 
        /* this will put all low memory onto the freelists */
        for_each_online_node(nid)
-               totalram_pages += free_all_bootmem_node(NODE_DATA(nid));
+               free_all_bootmem_node(NODE_DATA(nid));
 
        reservedpages = reservedpages_count() - hole_pages;
        codesize = (unsigned long) &_etext - (unsigned long)&_text;
index ab0b54ca5d85b7fb3c12679c3d613fe6f11f10c7..614c60a044597581c7b051c45fd4329c9c2005b8 100644 (file)
@@ -155,11 +155,11 @@ void __init mem_init(void)
        int i;
 
        /* this will put all memory onto the freelists */
-       totalram_pages = num_physpages = 0;
+       num_physpages = 0;
        for_each_online_pgdat(pgdat) {
                num_physpages += pgdat->node_present_pages;
 
-               totalram_pages += free_all_bootmem_node(pgdat);
+               free_all_bootmem_node(pgdat);
                for (i = 0; i < pgdat->node_spanned_pages; i++) {
                        struct page *page = pgdat->node_mem_map + i;
                        char *addr = page_to_virt(page);
index d7595f58fad50316d8849023712039a6a7312506..ce81d7c43983bc20ddae2e879fe6ea35a40db887 100644 (file)
@@ -393,14 +393,11 @@ void __init mem_init(void)
 
        for_each_online_node(nid) {
                pg_data_t *pgdat = NODE_DATA(nid);
-               unsigned long node_pages = 0;
 
                num_physpages += pgdat->node_present_pages;
 
                if (pgdat->node_spanned_pages)
-                       node_pages = free_all_bootmem_node(pgdat);
-
-               totalram_pages += node_pages;
+                       free_all_bootmem_node(pgdat);
        }
 
        pr_info("Memory: %luk/%luk available\n",
index d149e0ebb767706f01294f40d542352798ad7ee2..b384cbc2c8f247023e5d7e14b11fe3c1ce689bde 100644 (file)
@@ -252,7 +252,7 @@ void __init mem_init(void)
        high_memory = (void *)__va(memory_start + lowmem_size - 1);
 
        /* this will put all memory onto the freelists */
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 
        for_each_online_pgdat(pgdat) {
                unsigned long i;
index 268f2a94031ba99c244575b9ec7fdffddecd44fa..e7333f15b1b7555ce0a609ffae73c08355d411c3 100644 (file)
@@ -374,7 +374,7 @@ void __init mem_init(void)
 #endif
        high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
 
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
        setup_zero_pages();     /* Setup zeroed pages.  */
 
        reservedpages = ram = 0;
index 1230f56429d7334ea418f41921e709a9b737586a..aecac4a08360a4cb5df1e2916dbe341a8c393df7 100644 (file)
@@ -489,7 +489,7 @@ void __init mem_init(void)
                /*
                 * This will free up the bootmem, ie, slot 0 memory.
                 */
-               totalram_pages += free_all_bootmem_node(NODE_DATA(node));
+               free_all_bootmem_node(NODE_DATA(node));
        }
 
        setup_zero_pages();     /* This comes from node 0 */
index e19049d1f2b9730c56d028f6ea054bdc5bb9ebec..7590d91627f215efc8a419b011ae18003ad3badf 100644 (file)
@@ -114,7 +114,7 @@ void __init mem_init(void)
        memset(empty_zero_page, 0, PAGE_SIZE);
 
        /* this will put all low memory onto the freelists */
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 
        reservedpages = 0;
        for (tmp = 0; tmp < num_physpages; tmp++)
index c371e4a0fcac6e771466d0cfdbe2ae45b7f09007..16c1e135cf34b42712818a06c7df153f431aa016 100644 (file)
@@ -207,7 +207,7 @@ static int __init free_pages_init(void)
        int reservedpages, pfn;
 
        /* this will put all low memory onto the freelists */
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
        reservedpages = 0;
        for (pfn = 0; pfn < max_low_pfn; pfn++) {
index ebac7bd76b560a65b1c07ffd8263fd0be750d864..d8aaaf06ede221d55017a878a8ce54b5f31dc833 100644 (file)
@@ -593,13 +593,13 @@ void __init mem_init(void)
 
 #ifndef CONFIG_DISCONTIGMEM
        max_mapnr = page_to_pfn(virt_to_page(high_memory - 1)) + 1;
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 #else
        {
                int i;
 
                for (i = 0; i < npmem_ranges; i++)
-                       totalram_pages += free_all_bootmem_node(NODE_DATA(i));
+                       free_all_bootmem_node(NODE_DATA(i));
        }
 #endif
 
index 7f47a05f55af0b8884d8c871fe740d6ae5ff6764..3bcfc0d0d3227a3ac2b3970cf3437c1eb491d9d4 100644 (file)
@@ -318,13 +318,12 @@ void __init mem_init(void)
         for_each_online_node(nid) {
                if (NODE_DATA(nid)->node_spanned_pages != 0) {
                        printk("freeing bootmem node %d\n", nid);
-                       totalram_pages +=
-                               free_all_bootmem_node(NODE_DATA(nid));
+                       free_all_bootmem_node(NODE_DATA(nid));
                }
        }
 #else
        max_mapnr = max_pfn;
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 #endif
        for_each_online_pgdat(pgdat) {
                for (i = 0; i < pgdat->node_spanned_pages; i++) {
index bf01d18422ec95ca7e1d0161fff90fb58c5f055e..a2aafe1b2300e0134c8374d3400699ebf1dfca4a 100644 (file)
@@ -144,7 +144,7 @@ void __init mem_init(void)
        cmma_init();
 
        /* this will put all low memory onto the freelists */
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
        setup_zero_pages();     /* Setup zeroed pages. */
 
        reservedpages = 0;
index f5dd61eb4544150f336532aa8c7f6fe3a0224d7a..a8b917742dec7d2d3ed93fb83b9741c2e7133fad 100644 (file)
@@ -79,7 +79,7 @@ void __init mem_init(void)
        unsigned long tmp, ram = 0;
 
        high_memory = (void *) __va(max_low_pfn << PAGE_SHIFT);
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
        setup_zero_page();      /* Setup zeroed pages. */
        reservedpages = 0;
 
index d3af56b7a09815bcbf3c5b500cdb9bb512ce202c..fc0c8e1c32a710562d12f36bf3e967cec909d3d5 100644 (file)
@@ -422,7 +422,7 @@ void __init mem_init(void)
                num_physpages += pgdat->node_present_pages;
 
                if (pgdat->node_spanned_pages)
-                       totalram_pages += free_all_bootmem_node(pgdat);
+                       free_all_bootmem_node(pgdat);
 
 
                node_high_memory = (void *)__va((pgdat->node_start_pfn +
index d5f9c023826f90db8653efbd6d219e378fbb2b0d..a438abb5495efa718cce7e43df01438ace4958b9 100644 (file)
@@ -323,8 +323,7 @@ void __init mem_init(void)
 
        max_mapnr = last_valid_pfn - pfn_base;
        high_memory = __va(max_low_pfn << PAGE_SHIFT);
-
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
        for (i = 0; sp_banks[i].num_bytes != 0; i++) {
                unsigned long start_pfn = sp_banks[i].base_addr >> PAGE_SHIFT;
index 8269deb84edac7cc6b6fafa25b35723c5412e7b5..752d73837f9ecd7d31d1e9d25cacc24a2fe9d3a4 100644 (file)
@@ -2061,7 +2061,7 @@ void __init mem_init(void)
        high_memory = __va(last_valid_pfn << PAGE_SHIFT);
 
        register_page_bootmem_info();
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
        /* We subtract one to account for the mem_map_zero page
         * allocated below.
index ccfeb3f2e769f5ae583662c4b910d5defd3ef747..45ce26d4e474f7ed75793b4a7935552911379273 100644 (file)
@@ -846,7 +846,7 @@ void __init mem_init(void)
        set_max_mapnr_init();
 
        /* this will put all bootmem onto the freelists */
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 
 #ifndef CONFIG_64BIT
        /* count all remaining LOWMEM and give all HIGHMEM to page allocator */
index 8ff0b7ae8ec046df0885e2032d833491ed410bed..b0c763094ffb034daa161bed8a207d6505f22c37 100644 (file)
@@ -65,7 +65,7 @@ void __init mem_init(void)
        uml_reserved = brk_end;
 
        /* this will put all low memory onto the freelists */
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
        max_low_pfn = totalram_pages;
 #ifdef CONFIG_HIGHMEM
        setup_highmem(end_iomem, highmem);
index df9b8abcb6a5d47ce2e229aa860ca4c5c34ad607..7d1356c466b99ff5bb28fe1cad41252c163ca80a 100644 (file)
@@ -392,7 +392,7 @@ void __init mem_init(void)
        free_unused_memmap(&meminfo);
 
        /* this will put all unused low memory onto the freelists */
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 
        reserved_pages = free_pages = 0;
 
index 3ac7e319918d413bef5a48bfd38740dc9aa34118..9fa46baada27e33972757c27e15e4cf196d373db 100644 (file)
@@ -759,7 +759,7 @@ void __init mem_init(void)
        set_highmem_pages_init();
 
        /* this will put all low memory onto the freelists */
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 
        reservedpages = 0;
        for (tmp = 0; tmp < max_low_pfn; tmp++)
index ec312a92b13798109af09c68b78fb5a376bf7217..9577638f3ead4714d6afc4143474f1661c06cd70 100644 (file)
@@ -1054,7 +1054,7 @@ void __init mem_init(void)
        register_page_bootmem_info();
 
        /* this will put all memory onto the freelists */
-       totalram_pages = free_all_bootmem();
+       free_all_bootmem();
 
        absent_pages = absent_pages_in_range(0, max_pfn);
        reservedpages = max_pfn - totalram_pages - absent_pages;
index 026d29bee30b8190f89d9091d152c553bdb91185..663c1619562c78ed65c4f369eb1c61855dc32673 100644 (file)
@@ -184,7 +184,7 @@ void __init mem_init(void)
 #error HIGHGMEM not implemented in init.c
 #endif
 
-       totalram_pages += free_all_bootmem();
+       free_all_bootmem();
 
        reservedpages = ram = 0;
        for (tmp = 0; tmp < max_mapnr; tmp++) {
index eb792323187bc8b936ca0147ecf158f0fe81ab27..58609bbf584eb397e47cf27df2795f735feaa8eb 100644 (file)
@@ -271,9 +271,14 @@ void __init reset_all_zones_managed_pages(void)
  */
 unsigned long __init free_all_bootmem_node(pg_data_t *pgdat)
 {
+       unsigned long pages;
+
        register_page_bootmem_info_node(pgdat);
        reset_node_managed_pages(pgdat);
-       return free_all_bootmem_core(pgdat->bdata);
+       pages = free_all_bootmem_core(pgdat->bdata);
+       totalram_pages += pages;
+
+       return pages;
 }
 
 /**
@@ -291,6 +296,8 @@ unsigned long __init free_all_bootmem(void)
        list_for_each_entry(bdata, &bdata_list, list)
                total_pages += free_all_bootmem_core(bdata);
 
+       totalram_pages += total_pages;
+
        return total_pages;
 }
 
index 0ae8d91365af26de7d5d2cfc541f40a32c868fdb..61107cf55bb3e2c491bffdfb63f489b9587b6f06 100644 (file)
@@ -165,6 +165,8 @@ void __init reset_all_zones_managed_pages(void)
  */
 unsigned long __init free_all_bootmem(void)
 {
+       unsigned long pages;
+
        reset_all_zones_managed_pages();
 
        /*
@@ -172,7 +174,10 @@ unsigned long __init free_all_bootmem(void)
         *  because in some case like Node0 doesn't have RAM installed
         *  low ram will be on Node1
         */
-       return free_low_memory_core_early();
+       pages = free_low_memory_core_early();
+       totalram_pages += pages;
+
+       return pages;
 }
 
 /**