memory-hotplug: remove memmap of sparse-vmemmap
[platform/adaptation/renesas_rcar/renesas_kernel.git] / arch / x86 / mm / init_64.c
index ca6cd40..474e28f 100644 (file)
@@ -1011,6 +1011,23 @@ remove_pagetable(unsigned long start, unsigned long end, bool direct)
        flush_tlb_all();
 }
 
+void __ref vmemmap_free(struct page *memmap, unsigned long nr_pages)
+{
+       unsigned long start = (unsigned long)memmap;
+       unsigned long end = (unsigned long)(memmap + nr_pages);
+
+       remove_pagetable(start, end, false);
+}
+
+static void __meminit
+kernel_physical_mapping_remove(unsigned long start, unsigned long end)
+{
+       start = (unsigned long)__va(start);
+       end = (unsigned long)__va(end);
+
+       remove_pagetable(start, end, true);
+}
+
 #ifdef CONFIG_MEMORY_HOTREMOVE
 int __ref arch_remove_memory(u64 start, u64 size)
 {
@@ -1020,6 +1037,7 @@ int __ref arch_remove_memory(u64 start, u64 size)
        int ret;
 
        zone = page_zone(pfn_to_page(start_pfn));
+       kernel_physical_mapping_remove(start, start + size);
        ret = __remove_pages(zone, start_pfn, nr_pages);
        WARN_ON_ONCE(ret);