# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1201185635 0
# Node ID 6269a3ce7b830f6903a61e1116331590b47f7e99
# Parent 74a9bfccddba0fedd59c57e5f1a76d83a4178d7c
x86, hvm: MTRR can't cover all the memery ranges
MTRR can't cover all the memery ranges, due to guest E820 is changed
by CS:16728 with current method.
Signed-off-by: Disheng Su <disheng.su@xxxxxxxxx>
---
xen/arch/x86/hvm/mtrr.c | 15 ++++++++++++++-
1 files changed, 14 insertions(+), 1 deletion(-)
diff -r 74a9bfccddba -r 6269a3ce7b83 xen/arch/x86/hvm/mtrr.c
--- a/xen/arch/x86/hvm/mtrr.c Thu Jan 24 14:39:38 2008 +0000
+++ b/xen/arch/x86/hvm/mtrr.c Thu Jan 24 14:40:35 2008 +0000
@@ -186,7 +186,14 @@ static uint32_t range_to_mtrr(uint32_t r
uint8_t type)
{
if ( !range_sizek || (reg >= ((m->mtrr_cap & 0xff) - RESERVED_MTRR)) )
+ {
+ gdprintk(XENLOG_WARNING,
+ "Failed to init var mtrr msr[%d]"
+ "range_size:%x, total available MSR:%d\n",
+ reg, range_sizek,
+ (uint32_t)((m->mtrr_cap & 0xff) - RESERVED_MTRR));
return reg;
+ }
while ( range_sizek )
{
@@ -202,7 +209,13 @@ static uint32_t range_to_mtrr(uint32_t r
range_sizek -= sizek;
if ( reg >= ((m->mtrr_cap & 0xff) - RESERVED_MTRR) )
+ {
+ gdprintk(XENLOG_WARNING,
+ "Failed to init var mtrr msr[%d],"
+ "total available MSR:%d\n",
+ reg, (uint32_t)((m->mtrr_cap & 0xff) - RESERVED_MTRR));
break;
+ }
}
return reg;
@@ -253,7 +266,7 @@ static void setup_var_mtrrs(struct vcpu
{
if ( e820_table[i].addr == 0x100000 )
{
- size = e820_table[i].size + 0x100000 + PAGE_SIZE * 3;
+ size = e820_table[i].size + 0x100000 + PAGE_SIZE * 4;
addr = 0;
}
else
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|