Always free the lowest 1MB of pseudo-physical memory when booting
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 24 Aug 2005 15:46:33 +0000 (15:46 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Wed, 24 Aug 2005 15:46:33 +0000 (15:46 +0000)
a guest.

Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6-xen-sparse/arch/xen/x86_64/kernel/setup.c
linux-2.6-xen-sparse/include/asm-xen/asm-i386/mach-xen/setup_arch_post.h

index cd87c77b6511753919108eb0ff3a425021b42df4..b7f5de7cbeb58adb9ab53b4159807f2e2e8829ba 100644 (file)
@@ -428,8 +428,9 @@ static void __init contig_initmem_init(void)
 {
         unsigned long bootmap_size = init_bootmem(start_pfn, end_pfn);
         free_bootmem(0, end_pfn << PAGE_SHIFT);   
-        /* XXX KAF: Why can't we leave low 1MB of memory free? */
-        reserve_bootmem(0, (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1));
+        reserve_bootmem(HIGH_MEMORY,
+                        (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1)
+                        - HIGH_MEMORY);
 }
 #else
 static void __init contig_initmem_init(void)
index 78886d339ce3a2a0a9480a5a0ce206b4b94f4ed2..92d41bbf796dadd6e3a10adc1fd55dde8da83903 100644 (file)
@@ -8,23 +8,12 @@
 
 static char * __init machine_specific_memory_setup(void)
 {
-       char *who;
-       unsigned long start_pfn, max_pfn;
-
-       who = "Xen";
-
-       /* In dom0, we have to start the fake e820 map above the first
-        * 1MB, in other domains, it can start at 0. */
-       if (xen_start_info.flags & SIF_INITDOMAIN)
-               start_pfn = 0x100;
-       else
-               start_pfn = 0;
-       max_pfn = xen_start_info.nr_pages;
+       unsigned long max_pfn = xen_start_info.nr_pages;
 
        e820.nr_map = 0;
-       add_memory_region(PFN_PHYS(start_pfn), PFN_PHYS(max_pfn) - PFN_PHYS(start_pfn), E820_RAM);
+       add_memory_region(0, PFN_PHYS(max_pfn), E820_RAM);
 
-       return who;
+       return "Xen";
 }
 
 void __init machine_specific_modify_cpu_capabilities(struct cpuinfo_x86 *c)