Merge tag 'powerpc-6.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[platform/kernel/linux-rpi.git] / arch / powerpc / mm / init_64.c
index 70f8e9c..d96bbc0 100644 (file)
@@ -93,7 +93,7 @@ static struct page * __meminit vmemmap_subsection_start(unsigned long vmemmap_ad
  * a page table lookup here because with the hash translation we don't keep
  * vmemmap details in linux page table.
  */
-static int __meminit vmemmap_populated(unsigned long vmemmap_addr, int vmemmap_map_size)
+int __meminit vmemmap_populated(unsigned long vmemmap_addr, int vmemmap_map_size)
 {
        struct page *start;
        unsigned long vmemmap_end = vmemmap_addr + vmemmap_map_size;
@@ -184,8 +184,8 @@ static __meminit int vmemmap_list_populate(unsigned long phys,
        return 0;
 }
 
-static bool altmap_cross_boundary(struct vmem_altmap *altmap, unsigned long start,
-                               unsigned long page_size)
+bool altmap_cross_boundary(struct vmem_altmap *altmap, unsigned long start,
+                          unsigned long page_size)
 {
        unsigned long nr_pfn = page_size / sizeof(struct page);
        unsigned long start_pfn = page_to_pfn((struct page *)start);
@@ -199,8 +199,8 @@ static bool altmap_cross_boundary(struct vmem_altmap *altmap, unsigned long star
        return false;
 }
 
-int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
-               struct vmem_altmap *altmap)
+static int __meminit __vmemmap_populate(unsigned long start, unsigned long end, int node,
+                                       struct vmem_altmap *altmap)
 {
        bool altmap_alloc;
        unsigned long page_size = 1 << mmu_psize_defs[mmu_vmemmap_psize].shift;
@@ -273,6 +273,18 @@ int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
        return 0;
 }
 
+int __meminit vmemmap_populate(unsigned long start, unsigned long end, int node,
+                              struct vmem_altmap *altmap)
+{
+
+#ifdef CONFIG_PPC_BOOK3S_64
+       if (radix_enabled())
+               return radix__vmemmap_populate(start, end, node, altmap);
+#endif
+
+       return __vmemmap_populate(start, end, node, altmap);
+}
+
 #ifdef CONFIG_MEMORY_HOTPLUG
 static unsigned long vmemmap_list_free(unsigned long start)
 {
@@ -304,8 +316,8 @@ static unsigned long vmemmap_list_free(unsigned long start)
        return vmem_back->phys;
 }
 
-void __ref vmemmap_free(unsigned long start, unsigned long end,
-               struct vmem_altmap *altmap)
+static void __ref __vmemmap_free(unsigned long start, unsigned long end,
+                                struct vmem_altmap *altmap)
 {
        unsigned long page_size = 1 << mmu_psize_defs[mmu_vmemmap_psize].shift;
        unsigned long page_order = get_order(page_size);
@@ -315,8 +327,7 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
        start = ALIGN_DOWN(start, page_size);
        if (altmap) {
                alt_start = altmap->base_pfn;
-               alt_end = altmap->base_pfn + altmap->reserve +
-                         altmap->free + altmap->alloc + altmap->align;
+               alt_end = altmap->base_pfn + altmap->reserve + altmap->free;
        }
 
        pr_debug("vmemmap_free %lx...%lx\n", start, end);
@@ -363,6 +374,17 @@ void __ref vmemmap_free(unsigned long start, unsigned long end,
                vmemmap_remove_mapping(start, page_size);
        }
 }
+
+void __ref vmemmap_free(unsigned long start, unsigned long end,
+                       struct vmem_altmap *altmap)
+{
+#ifdef CONFIG_PPC_BOOK3S_64
+       if (radix_enabled())
+               return radix__vmemmap_free(start, end, altmap);
+#endif
+       return __vmemmap_free(start, end, altmap);
+}
+
 #endif
 void register_page_bootmem_memmap(unsigned long section_nr,
                                  struct page *start_page, unsigned long size)