]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mm/sparse: add common helper to mark all memblocks present
authorLogan Gunthorpe <logang@deltatee.com>
Fri, 14 Dec 2018 22:16:57 +0000 (14:16 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 14 Dec 2018 23:05:45 +0000 (15:05 -0800)
Presently the arches arm64, arm and sh have a function which loops
through each memblock and calls memory present.  riscv will require a
similar function.

Introduce a common memblocks_present() function that can be used by all
the arches.  Subsequent patches will cleanup the arches that make use of
this.

Link: http://lkml.kernel.org/r/20181107205433.3875-3-logang@deltatee.com
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Acked-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Vlastimil Babka <vbabka@suse.cz>
Cc: Oscar Salvador <osalvador@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/mmzone.h
mm/sparse.c

index 847705a6d0ec2dba2a82ca87bba54c797bb0b956..db023a92f3a4a814d30927af066411ac5532270f 100644 (file)
@@ -783,6 +783,12 @@ void memory_present(int nid, unsigned long start, unsigned long end);
 static inline void memory_present(int nid, unsigned long start, unsigned long end) {}
 #endif
 
+#if defined(CONFIG_SPARSEMEM)
+void memblocks_present(void);
+#else
+static inline void memblocks_present(void) {}
+#endif
+
 #ifdef CONFIG_HAVE_MEMORYLESS_NODES
 int local_memory_node(int node_id);
 #else
index 33307fc05c4d3372d5e4746116330532765e61d7..3abc8cc5020120a3bbeb7c3429d19472fc96d051 100644 (file)
@@ -239,6 +239,22 @@ void __init memory_present(int nid, unsigned long start, unsigned long end)
        }
 }
 
+/*
+ * Mark all memblocks as present using memory_present(). This is a
+ * convienence function that is useful for a number of arches
+ * to mark all of the systems memory as present during initialization.
+ */
+void __init memblocks_present(void)
+{
+       struct memblock_region *reg;
+
+       for_each_memblock(memory, reg) {
+               memory_present(memblock_get_region_node(reg),
+                              memblock_region_memory_base_pfn(reg),
+                              memblock_region_memory_end_pfn(reg));
+       }
+}
+
 /*
  * Subtle, we encode the real pfn into the mem_map such that
  * the identity pfn - section_mem_map will return the actual