[S390] Add support for memory hot-add.
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 14 Jul 2008 07:59:18 +0000 (09:59 +0200)
committerHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 14 Jul 2008 08:02:16 +0000 (10:02 +0200)
Cc: Gerald Schaefer <gerald.schaefer@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/Kconfig
arch/s390/mm/init.c
include/asm-s390/sparsemem.h
mm/Kconfig

index 6d0d31651f0515ed8cb78dffc2aa84609e807e49..5dc8f8028d520b6c0a09dd4e0a6ffb70d4891d84 100644 (file)
@@ -313,6 +313,10 @@ config ARCH_SPARSEMEM_DEFAULT
 config ARCH_SELECT_MEMORY_MODEL
        def_bool y
 
 config ARCH_SELECT_MEMORY_MODEL
        def_bool y
 
+config ARCH_ENABLE_MEMORY_HOTPLUG
+       def_bool y
+       depends on SPARSEMEM
+
 source "mm/Kconfig"
 
 comment "I/O subsystem configuration"
 source "mm/Kconfig"
 
 comment "I/O subsystem configuration"
index 05598649b3260f8689845ea2815914ffdd08e902..388cc742005544b05747d32a485e88c5c37cf5a6 100644 (file)
@@ -202,3 +202,22 @@ void free_initrd_mem(unsigned long start, unsigned long end)
         }
 }
 #endif
         }
 }
 #endif
+
+#ifdef CONFIG_MEMORY_HOTPLUG
+int arch_add_memory(int nid, u64 start, u64 size)
+{
+       struct pglist_data *pgdat;
+       struct zone *zone;
+       int rc;
+
+       pgdat = NODE_DATA(nid);
+       zone = pgdat->node_zones + ZONE_NORMAL;
+       rc = vmem_add_mapping(start, size);
+       if (rc)
+               return rc;
+       rc = __add_pages(zone, PFN_DOWN(start), PFN_DOWN(size));
+       if (rc)
+               vmem_remove_mapping(start, size);
+       return rc;
+}
+#endif /* CONFIG_MEMORY_HOTPLUG */
index 06dfdab6c0e8412a305c1e2bbfba03354dd30176..545d219e6a2d0d4e5dec734d7dc1d55f2906dd72 100644 (file)
@@ -1,15 +1,15 @@
 #ifndef _ASM_S390_SPARSEMEM_H
 #define _ASM_S390_SPARSEMEM_H
 
 #ifndef _ASM_S390_SPARSEMEM_H
 #define _ASM_S390_SPARSEMEM_H
 
-#define SECTION_SIZE_BITS      25
-
 #ifdef CONFIG_64BIT
 
 #ifdef CONFIG_64BIT
 
+#define SECTION_SIZE_BITS      28
 #define MAX_PHYSADDR_BITS      42
 #define MAX_PHYSMEM_BITS       42
 
 #else
 
 #define MAX_PHYSADDR_BITS      42
 #define MAX_PHYSMEM_BITS       42
 
 #else
 
+#define SECTION_SIZE_BITS      25
 #define MAX_PHYSADDR_BITS      31
 #define MAX_PHYSMEM_BITS       31
 
 #define MAX_PHYSADDR_BITS      31
 #define MAX_PHYSMEM_BITS       31
 
index 3aa819d628c112cc185f9545c7ae5e3fb8a5c310..4242743b981bcd2e8a864e43769831701e0fa44c 100644 (file)
@@ -129,7 +129,7 @@ config MEMORY_HOTPLUG
        bool "Allow for memory hot-add"
        depends on SPARSEMEM || X86_64_ACPI_NUMA
        depends on HOTPLUG && !HIBERNATION && ARCH_ENABLE_MEMORY_HOTPLUG
        bool "Allow for memory hot-add"
        depends on SPARSEMEM || X86_64_ACPI_NUMA
        depends on HOTPLUG && !HIBERNATION && ARCH_ENABLE_MEMORY_HOTPLUG
-       depends on (IA64 || X86 || PPC64 || SUPERH)
+       depends on (IA64 || X86 || PPC64 || SUPERH || S390)
 
 comment "Memory hotplug is currently incompatible with Software Suspend"
        depends on SPARSEMEM && HOTPLUG && HIBERNATION
 
 comment "Memory hotplug is currently incompatible with Software Suspend"
        depends on SPARSEMEM && HOTPLUG && HIBERNATION