---
 arch/x86/include/asm/e820.h    |    1 +
 arch/x86/kernel/e820.c         |    2 ++
 drivers/acpi/acpi_memhotplug.c |    4 ++++
 3 files changed, 7 insertions(+)

Index: linux/arch/x86/include/asm/e820.h
===================================================================
--- linux.orig/arch/x86/include/asm/e820.h
+++ linux/arch/x86/include/asm/e820.h
@@ -69,6 +69,7 @@ static inline bool is_ISA_range(u64 s, u
 {
 	return s >= ISA_START_ADDRESS && e <= ISA_END_ADDRESS;
 }
+extern bool use_exactmap;
 
 #endif /* __ASSEMBLY__ */
 #include <linux/ioport.h>
Index: linux/arch/x86/kernel/e820.c
===================================================================
--- linux.orig/arch/x86/kernel/e820.c
+++ linux/arch/x86/kernel/e820.c
@@ -838,6 +838,7 @@ static int __init parse_memopt(char *p)
 }
 early_param("mem", parse_memopt);
 
+bool use_exactmap;
 static int __init parse_memmap_one(char *p)
 {
 	char *oldp;
@@ -857,6 +858,7 @@ static int __init parse_memmap_one(char
 #endif
 		e820.nr_map = 0;
 		userdef = 1;
+		use_exactmap = true;
 		return 0;
 	}
 
Index: linux/drivers/acpi/acpi_memhotplug.c
===================================================================
--- linux.orig/drivers/acpi/acpi_memhotplug.c
+++ linux/drivers/acpi/acpi_memhotplug.c
@@ -363,5 +363,9 @@ static void acpi_memory_device_remove(st
 
 void __init acpi_memory_hotplug_init(void)
 {
+#ifdef CONFIG_X86
+	if (use_exactmap)
+		return;
+#endif
 	acpi_scan_add_handler_with_hotplug(&memory_device_handler, "memory");
 }