diff options
author | Tim Deegan <Tim.Deegan@xensource.com> | 2007-05-08 10:32:05 +0100 |
---|---|---|
committer | Tim Deegan <Tim.Deegan@xensource.com> | 2007-05-08 10:32:05 +0100 |
commit | b672b7a5c4860904a464f06cf23dde59cc8d4fd9 (patch) | |
tree | 11d55c1db0cb958710fa4e891597ce664b1facd6 | |
parent | 21bff006dad730c0b27239b55ef5aca6b0ddb655 (diff) | |
download | xen-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.c | 11 |
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 |