hexagon: switch to NO_BOOTMEM
authorMike Rapoport <rppt@linux.vnet.ibm.com>
Fri, 26 Oct 2018 22:04:44 +0000 (15:04 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 26 Oct 2018 23:25:20 +0000 (16:25 -0700)
Patch series "switch several architectures NO_BOOTMEM".

These patches perform conversion to NO_BOOTMEM of hexagon, nios2, uml and
unicore32.

This patch (of 7):

Add registration of the system memory with memblock, eliminate bootmem
initialization and convert early memory reservations from bootmem to
memblock.

Link: http://lkml.kernel.org/r/1533326330-31677-2-git-send-email-rppt@linux.vnet.ibm.com
Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
Acked-by: Richard Kuo <rkuo@codeaurora.org>
Cc: Guan Xuetao <gxt@pku.edu.cn>
Cc: Ley Foon Tan <ley.foon.tan@intel.com>
Cc: Richard Weinberger <richard@nod.at>
Cc: Rob Herring <robh@kernel.org>
Cc: Michal Hocko <mhocko@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/hexagon/Kconfig
arch/hexagon/mm/init.c

index 3ef46522e89f1b5f593469e7c4d6b212b2abc260..7b25d7c8fa49c6d444a79910e93ce9661ffdc00a 100644 (file)
@@ -21,6 +21,9 @@ config HEXAGON
        select GENERIC_IRQ_SHOW
        select HAVE_ARCH_KGDB
        select HAVE_ARCH_TRACEHOOK
+       select HAVE_MEMBLOCK
+       select ARCH_DISCARD_MEMBLOCK
+       select NO_BOOTMEM
        select NEED_SG_DMA_LENGTH
        select NO_IOPORT_MAP
        select GENERIC_IOMAP
index 1495d45e472d880a0e484ed8b567435414d91884..d789b9cc0189458b2aa9da85c6410bac5af36e44 100644 (file)
@@ -21,6 +21,7 @@
 #include <linux/init.h>
 #include <linux/mm.h>
 #include <linux/bootmem.h>
+#include <linux/memblock.h>
 #include <asm/atomic.h>
 #include <linux/highmem.h>
 #include <asm/tlb.h>
@@ -176,7 +177,6 @@ size_t hexagon_coherent_pool_size = (size_t) (DMA_RESERVE << 22);
 
 void __init setup_arch_memory(void)
 {
-       int bootmap_size;
        /*  XXX Todo: this probably should be cleaned up  */
        u32 *segtable = (u32 *) &swapper_pg_dir[0];
        u32 *segtable_end;
@@ -195,18 +195,22 @@ void __init setup_arch_memory(void)
        bootmem_lastpg = PFN_DOWN((bootmem_lastpg << PAGE_SHIFT) &
                ~((BIG_KERNEL_PAGE_SIZE) - 1));
 
+       memblock_add(PHYS_OFFSET,
+                    (bootmem_lastpg - ARCH_PFN_OFFSET) << PAGE_SHIFT);
+
+       /* Reserve kernel text/data/bss */
+       memblock_reserve(PHYS_OFFSET,
+                        (bootmem_startpg - ARCH_PFN_OFFSET) << PAGE_SHIFT);
        /*
         * Reserve the top DMA_RESERVE bytes of RAM for DMA (uncached)
         * memory allocation
         */
-
        max_low_pfn = bootmem_lastpg - PFN_DOWN(DMA_RESERVED_BYTES);
        min_low_pfn = ARCH_PFN_OFFSET;
-       bootmap_size =  init_bootmem_node(NODE_DATA(0), bootmem_startpg, min_low_pfn, max_low_pfn);
+       memblock_reserve(PFN_PHYS(max_low_pfn), DMA_RESERVED_BYTES);
 
        printk(KERN_INFO "bootmem_startpg:  0x%08lx\n", bootmem_startpg);
        printk(KERN_INFO "bootmem_lastpg:  0x%08lx\n", bootmem_lastpg);
-       printk(KERN_INFO "bootmap_size:  %d\n", bootmap_size);
        printk(KERN_INFO "min_low_pfn:  0x%08lx\n", min_low_pfn);
        printk(KERN_INFO "max_low_pfn:  0x%08lx\n", max_low_pfn);
 
@@ -256,14 +260,6 @@ void __init setup_arch_memory(void)
        printk(KERN_INFO "*segtable = 0x%08x\n", *segtable);
 #endif
 
-       /*
-        * Free all the memory that wasn't taken up by the bootmap, the DMA
-        * reserve, or kernel itself.
-        */
-       free_bootmem(PFN_PHYS(bootmem_startpg) + bootmap_size,
-                    PFN_PHYS(bootmem_lastpg - bootmem_startpg) - bootmap_size -
-                    DMA_RESERVED_BYTES);
-
        /*
         *  The bootmem allocator seemingly just lives to feed memory
         *  to the paging system