diff options
author | Keir Fraser <keir@xen.org> | 2012-08-28 22:40:45 +0100 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2012-08-28 22:40:45 +0100 |
commit | 4eae16a077bb6d30a499efe78170b521e6e5e879 (patch) | |
tree | 17d7be2c1f3f3f8060c2dcabd35813d19347e393 | |
parent | efbb5c54110baf958e2ae5681e08eb25aa26c62d (diff) | |
download | xen-4eae16a077bb6d30a499efe78170b521e6e5e879.tar.gz xen-4eae16a077bb6d30a499efe78170b521e6e5e879.tar.bz2 xen-4eae16a077bb6d30a499efe78170b521e6e5e879.zip |
x86: Prefer multiboot-provided e820 over bios-provided e801 memory info.
Some UEFI systems do not provide e820 information. In this case we
should take the detailed memory map provided by a multiboot-capable
loader, rather than rely on very conservative values from the e801
bios call. Using the latter on any modern system really hardly makes
good sense.
[Excellent candidate for 4.1 backport]
Signed-off-by: Keir Fraser <keir@xen.org>
Tested-by: Jonathan Tripathy <jonnyt@abpni.co.uk>
-rw-r--r-- | xen/arch/x86/setup.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 3024fec8fd..7fffdc4a95 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -690,17 +690,6 @@ void __init __start_xen(unsigned long mbi_p) { memmap_type = "Xen-e820"; } - else if ( bootsym(lowmem_kb) ) - { - memmap_type = "Xen-e801"; - e820_raw[0].addr = 0; - e820_raw[0].size = bootsym(lowmem_kb) << 10; - e820_raw[0].type = E820_RAM; - e820_raw[1].addr = 0x100000; - e820_raw[1].size = bootsym(highmem_kb) << 10; - e820_raw[1].type = E820_RAM; - e820_raw_nr = 2; - } else if ( mbi->flags & MBI_MEMMAP ) { memmap_type = "Multiboot-e820"; @@ -738,6 +727,17 @@ void __init __start_xen(unsigned long mbi_p) bytes += map->size + 4; } } + else if ( bootsym(lowmem_kb) ) + { + memmap_type = "Xen-e801"; + e820_raw[0].addr = 0; + e820_raw[0].size = bootsym(lowmem_kb) << 10; + e820_raw[0].type = E820_RAM; + e820_raw[1].addr = 0x100000; + e820_raw[1].size = bootsym(highmem_kb) << 10; + e820_raw[1].type = E820_RAM; + e820_raw_nr = 2; + } else if ( mbi->flags & MBI_MEMLIMITS ) { memmap_type = "Multiboot-e801"; |