aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Deegan <Tim.Deegan@xensource.com>2007-05-08 10:32:05 +0100
committerTim Deegan <Tim.Deegan@xensource.com>2007-05-08 10:32:05 +0100
commitb672b7a5c4860904a464f06cf23dde59cc8d4fd9 (patch)
tree11d55c1db0cb958710fa4e891597ce664b1facd6
parent21bff006dad730c0b27239b55ef5aca6b0ddb655 (diff)
downloadxen-b672b7a5c4860904a464f06cf23dde59cc8d4fd9.tar.gz
xen-b672b7a5c4860904a464f06cf23dde59cc8d4fd9.tar.bz2
xen-b672b7a5c4860904a464f06cf23dde59cc8d4fd9.zip
[HVM] Fix shadow remove-write-access heuristic for 64bit w2k3 linear map.
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
-rw-r--r--xen/arch/x86/mm/shadow/common.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c
index 2f5c7ba557..a4598e4bc2 100644
--- a/xen/arch/x86/mm/shadow/common.c
+++ b/xen/arch/x86/mm/shadow/common.c
@@ -1764,12 +1764,15 @@ int sh_remove_write_access(struct vcpu *v, mfn_t gmfn,
#if CONFIG_PAGING_LEVELS >= 4
else if ( v->arch.paging.mode->guest_levels == 4 )
{
- /* 64bit w2k3: linear map at 0x0000070000000000 */
+ /* 64bit w2k3: linear map at 0xfffff68000000000 */
switch ( level )
{
- case 1: GUESS(0x70000000000UL + (fault_addr >> 9), 3); break;
- case 2: GUESS(0x70380000000UL + (fault_addr >> 18), 3); break;
- case 3: GUESS(0x70381C00000UL + (fault_addr >> 27), 3); break;
+ case 1: GUESS(0xfffff68000000000UL
+ + ((fault_addr & VADDR_MASK) >> 9), 3); break;
+ case 2: GUESS(0xfffff6fb40000000UL
+ + ((fault_addr & VADDR_MASK) >> 18), 3); break;
+ case 3: GUESS(0xfffff6fb7da00000UL
+ + ((fault_addr & VADDR_MASK) >> 27), 3); break;
}
/* 64bit Linux direct map at 0xffff810000000000; older kernels