|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-unstable] [XEN] Fix some e820 start-of-day issues b
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxxx
# Date 1168780513 0
# Node ID 328deec3febfae2ddf66ed67e74abc07f8f91107
# Parent eb19c2745b8010ee5ee8700cb36ecd5eef53e656
[XEN] Fix some e820 start-of-day issues by clipping all E820_RAM
regions to be page-sized and -aligned.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/setup.c | 23 ++++++++++++++++++++---
1 files changed, 20 insertions(+), 3 deletions(-)
diff -r eb19c2745b80 -r 328deec3febf xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c Sun Jan 14 12:03:31 2007 +0000
+++ b/xen/arch/x86/setup.c Sun Jan 14 13:15:13 2007 +0000
@@ -411,6 +411,23 @@ void __init __start_xen(multiboot_info_t
printk("WARNING: Buggy e820 map detected and fixed "
"(truncated length fields).\n");
+ /* Ensure that all E820 RAM regions are page-aligned and -sized. */
+ for ( i = 0; i < e820_raw_nr; i++ )
+ {
+ uint64_t s, e;
+ if ( e820_raw[i].type != E820_RAM )
+ continue;
+ s = PFN_UP(e820_raw[i].addr);
+ e = PFN_DOWN(e820_raw[i].addr + e820_raw[i].size);
+ e820_raw[i].size = 0; /* discarded later */
+ if ( s < e )
+ {
+ e820_raw[i].addr = s << PAGE_SHIFT;
+ e820_raw[i].size = (e - s) << PAGE_SHIFT;
+ }
+ }
+
+ /* Sanitise the raw E820 map to produce a final clean version. */
max_page = init_e820(e820_raw, &e820_raw_nr);
modules_length = mod[mbi->mods_count-1].mod_end - mod[0].mod_start;
@@ -423,7 +440,7 @@ void __init __start_xen(multiboot_info_t
printk("Not enough memory to stash the DOM0 kernel image.\n");
for ( ; ; ) ;
}
-
+
if ( (e820.map[i].type == E820_RAM) &&
(e820.map[i].size >= modules_length) &&
((e820.map[i].addr + e820.map[i].size) >=
@@ -474,10 +491,10 @@ void __init __start_xen(multiboot_info_t
start = PFN_UP(e820.map[i].addr);
end = PFN_DOWN(e820.map[i].addr + e820.map[i].size);
/* Clip the range to exclude what the bootstrapper initialised. */
- if ( end < init_mapped )
- continue;
if ( start < init_mapped )
start = init_mapped;
+ if ( end <= start )
+ continue;
/* Request the mapping. */
map_pages_to_xen(
PAGE_OFFSET + (start << PAGE_SHIFT),
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-unstable] [XEN] Fix some e820 start-of-day issues by clipping all E820_RAM,
Xen patchbot-unstable <=
|
|
|
|
|