Merge tag 'for-linus-5.1a-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / arch / x86 / kernel / e820.c
index 50895c2f937d144f9fd2b133c0522aadc7841c9e..666e4af145a25dd6be6113269259c45d6aa4a895 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/acpi.h>
 #include <linux/firmware-map.h>
 #include <linux/sort.h>
+#include <linux/memory_hotplug.h>
 
 #include <asm/e820/api.h>
 #include <asm/setup.h>
@@ -671,21 +672,18 @@ __init void e820__reallocate_tables(void)
        int size;
 
        size = offsetof(struct e820_table, entries) + sizeof(struct e820_entry)*e820_table->nr_entries;
-       n = kmalloc(size, GFP_KERNEL);
+       n = kmemdup(e820_table, size, GFP_KERNEL);
        BUG_ON(!n);
-       memcpy(n, e820_table, size);
        e820_table = n;
 
        size = offsetof(struct e820_table, entries) + sizeof(struct e820_entry)*e820_table_kexec->nr_entries;
-       n = kmalloc(size, GFP_KERNEL);
+       n = kmemdup(e820_table_kexec, size, GFP_KERNEL);
        BUG_ON(!n);
-       memcpy(n, e820_table_kexec, size);
        e820_table_kexec = n;
 
        size = offsetof(struct e820_table, entries) + sizeof(struct e820_entry)*e820_table_firmware->nr_entries;
-       n = kmalloc(size, GFP_KERNEL);
+       n = kmemdup(e820_table_firmware, size, GFP_KERNEL);
        BUG_ON(!n);
-       memcpy(n, e820_table_firmware, size);
        e820_table_firmware = n;
 }
 
@@ -881,6 +879,10 @@ static int __init parse_memopt(char *p)
 
        e820__range_remove(mem_size, ULLONG_MAX - mem_size, E820_TYPE_RAM, 1);
 
+#ifdef CONFIG_MEMORY_HOTPLUG
+       max_mem_size = mem_size;
+#endif
+
        return 0;
 }
 early_param("mem", parse_memopt);