xen/setup: Fix for incorrect xen_extra_mem_start.
[linux-2.6.git] / arch / x86 / xen / setup.c
index be1a464..60aeeb5 100644 (file)
@@ -227,11 +227,7 @@ char * __init xen_memory_setup(void)
 
        memcpy(map_raw, map, sizeof(map));
        e820.nr_map = 0;
-#ifdef CONFIG_X86_32
        xen_extra_mem_start = mem_end;
-#else
-       xen_extra_mem_start = max((1ULL << 32), mem_end);
-#endif
        for (i = 0; i < memmap.nr_entries; i++) {
                unsigned long long end;
 
@@ -266,6 +262,12 @@ char * __init xen_memory_setup(void)
                if (map[i].size > 0)
                        e820_add_region(map[i].addr, map[i].size, map[i].type);
        }
+       /* Align the balloon area so that max_low_pfn does not get set
+        * to be at the _end_ of the PCI gap at the far end (fee01000).
+        * Note that xen_extra_mem_start gets set in the loop above to be
+        * past the last E820 region. */
+       if (xen_initial_domain() && (xen_extra_mem_start < (1ULL<<32)))
+               xen_extra_mem_start = (1ULL<<32);
 
        /*
         * In domU, the ISA region is normal, usable memory, but we