|
@@ -1011,6 +1011,15 @@ remove_pagetable(unsigned long start, unsigned long end, bool direct)
|
|
|
flush_tlb_all();
|
|
|
}
|
|
|
|
|
|
+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 +1029,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);
|
|
|
|