xen: reserve Xen-specific memory in e820 map
authorJeremy Fitzhardinge <jeremy@goop.org>
Mon, 16 Jun 2008 21:54:46 +0000 (14:54 -0700)
committerIngo Molnar <mingo@elte.hu>
Tue, 8 Jul 2008 10:48:28 +0000 (12:48 +0200)
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Cc: Yinghai Lu <yhlu.kernel@gmail.com>
Cc: the arch/x86 maintainers <x86@kernel.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Cc: Yinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/xen/setup.c

index a29575803204b87301d457dbdc05a6805b252a3b..dc2ca8ad3603aba73b8a4ed8c78478c74e31ba4a 100644 (file)
@@ -40,9 +40,22 @@ char * __init xen_memory_setup(void)
        max_pfn = min(MAX_DOMAIN_PAGES, max_pfn);
 
        e820.nr_map = 0;
+
        e820_add_region(0, LOWMEMSIZE(), E820_RAM);
        e820_add_region(HIGH_MEMORY, PFN_PHYS(max_pfn)-HIGH_MEMORY, E820_RAM);
 
+       /*
+        * Reserve Xen bits:
+        *  - mfn_list
+        *  - xen_start_info
+        * See comment above "struct start_info" in <xen/interface/xen.h>
+        */
+       e820_add_region(__pa(xen_start_info->mfn_list),
+                       xen_start_info->pt_base - xen_start_info->mfn_list,
+                       E820_RESERVED);
+
+       sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
+
        return "Xen";
 }