powerpc: Remove ppc_md.remove_memory
authorAnton Blanchard <anton@samba.org>
Tue, 14 Oct 2014 11:17:47 +0000 (22:17 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 5 Nov 2014 10:00:46 +0000 (21:00 +1100)
We have an extra level of indirection on memory hot remove which is not
matched on memory hot add. Memory hotplug is book3s only, so there is
no need for it.

This also enables means remove_memory() (ie memory hot unplug) works
on powernv.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/machdep.h
arch/powerpc/mm/mem.c
arch/powerpc/platforms/pseries/hotplug-memory.c

index 4a6511f942583844027115104512fa5f44869963..15c9150a58cc8ecd84b75a60935d7b3780b2f5be 100644 (file)
@@ -291,10 +291,6 @@ struct machdep_calls {
 #ifdef CONFIG_ARCH_RANDOM
        int (*get_random_long)(unsigned long *v);
 #endif
-
-#ifdef CONFIG_MEMORY_HOTREMOVE
-       int (*remove_memory)(u64, u64);
-#endif
 };
 
 extern void e500_idle(void);
index 8ebaac75c940ad7c5e9752a71c7dd7894e2bdedf..2add0b7b9f6d19bc076eb7b8458db849b204d532 100644 (file)
@@ -35,6 +35,7 @@
 #include <linux/memblock.h>
 #include <linux/hugetlb.h>
 #include <linux/slab.h>
+#include <linux/vmalloc.h>
 
 #include <asm/pgalloc.h>
 #include <asm/prom.h>
@@ -144,8 +145,17 @@ int arch_remove_memory(u64 start, u64 size)
 
        zone = page_zone(pfn_to_page(start_pfn));
        ret = __remove_pages(zone, start_pfn, nr_pages);
-       if (!ret && (ppc_md.remove_memory))
-               ret = ppc_md.remove_memory(start, size);
+       if (ret)
+               return ret;
+
+       /* Remove htab bolted mappings for this section of memory */
+       start = (unsigned long)__va(start);
+       ret = remove_section_mapping(start, start + size);
+
+       /* Ensure all vmalloc mappings are flushed in case they also
+        * hit that section of memory
+        */
+       vm_unmap_aliases();
 
        return ret;
 }
index 3c4c0dcd90d3e03051b4b09a3c28caabfe6edd1c..3cb256c2138e486d24a61ba6b09a8841939216f0 100644 (file)
@@ -12,7 +12,6 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/memblock.h>
-#include <linux/vmalloc.h>
 #include <linux/memory.h>
 #include <linux/memory_hotplug.h>
 
@@ -66,22 +65,6 @@ unsigned long pseries_memory_block_size(void)
 }
 
 #ifdef CONFIG_MEMORY_HOTREMOVE
-static int pseries_remove_memory(u64 start, u64 size)
-{
-       int ret;
-
-       /* Remove htab bolted mappings for this section of memory */
-       start = (unsigned long)__va(start);
-       ret = remove_section_mapping(start, start + size);
-
-       /* Ensure all vmalloc mappings are flushed in case they also
-        * hit that section of memory
-        */
-       vm_unmap_aliases();
-
-       return ret;
-}
-
 static int pseries_remove_memblock(unsigned long base, unsigned int memblock_size)
 {
        unsigned long block_sz, start_pfn;
@@ -262,10 +245,6 @@ static int __init pseries_memory_hotplug_init(void)
        if (firmware_has_feature(FW_FEATURE_LPAR))
                of_reconfig_notifier_register(&pseries_mem_nb);
 
-#ifdef CONFIG_MEMORY_HOTREMOVE
-       ppc_md.remove_memory = pseries_remove_memory;
-#endif
-
        return 0;
 }
 machine_device_initcall(pseries, pseries_memory_hotplug_init);