diff options
| author | Sheng Yang <sheng.yang@intel.com> | 2008-09-08 03:12:30 -0400 |
|---|---|---|
| committer | Avi Kivity <avi@qumranet.com> | 2008-09-11 04:48:19 -0400 |
| commit | 534e38b447df47f129a6d3ec3af6705c1e3f651e (patch) | |
| tree | 27f6ffda36c37d3fc96418e6e40239426f8bce74 | |
| parent | e5eab0cede4b1ffaca4ad857d840127622038e55 (diff) | |
KVM: VMX: Always return old for clear_flush_young() when using EPT
As well as discard fake accessed bit and dirty bit of EPT.
Signed-off-by: Sheng Yang <sheng.yang@intel.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
| -rw-r--r-- | arch/x86/kvm/mmu.c | 4 | ||||
| -rw-r--r-- | arch/x86/kvm/vmx.c | 3 | ||||
| -rw-r--r-- | arch/x86/kvm/vmx.h | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 0bfe2bd305eb..3da2508eb22a 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
| @@ -711,6 +711,10 @@ static int kvm_age_rmapp(struct kvm *kvm, unsigned long *rmapp) | |||
| 711 | u64 *spte; | 711 | u64 *spte; |
| 712 | int young = 0; | 712 | int young = 0; |
| 713 | 713 | ||
| 714 | /* always return old for EPT */ | ||
| 715 | if (!shadow_accessed_mask) | ||
| 716 | return 0; | ||
| 717 | |||
| 714 | spte = rmap_next(kvm, rmapp, NULL); | 718 | spte = rmap_next(kvm, rmapp, NULL); |
| 715 | while (spte) { | 719 | while (spte) { |
| 716 | int _young; | 720 | int _young; |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 2a69773e3b26..7041cc52b562 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
| @@ -3301,8 +3301,7 @@ static int __init vmx_init(void) | |||
| 3301 | kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | | 3301 | kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | |
| 3302 | VMX_EPT_WRITABLE_MASK | | 3302 | VMX_EPT_WRITABLE_MASK | |
| 3303 | VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); | 3303 | VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); |
| 3304 | kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK, | 3304 | kvm_mmu_set_mask_ptes(0ull, 0ull, 0ull, 0ull, |
| 3305 | VMX_EPT_FAKE_DIRTY_MASK, 0ull, | ||
| 3306 | VMX_EPT_EXECUTABLE_MASK); | 3305 | VMX_EPT_EXECUTABLE_MASK); |
| 3307 | kvm_enable_tdp(); | 3306 | kvm_enable_tdp(); |
| 3308 | } else | 3307 | } else |
diff --git a/arch/x86/kvm/vmx.h b/arch/x86/kvm/vmx.h index 425a13436b3f..23e8373507ad 100644 --- a/arch/x86/kvm/vmx.h +++ b/arch/x86/kvm/vmx.h | |||
| @@ -370,8 +370,6 @@ enum vmcs_field { | |||
| 370 | #define VMX_EPT_READABLE_MASK 0x1ull | 370 | #define VMX_EPT_READABLE_MASK 0x1ull |
| 371 | #define VMX_EPT_WRITABLE_MASK 0x2ull | 371 | #define VMX_EPT_WRITABLE_MASK 0x2ull |
| 372 | #define VMX_EPT_EXECUTABLE_MASK 0x4ull | 372 | #define VMX_EPT_EXECUTABLE_MASK 0x4ull |
| 373 | #define VMX_EPT_FAKE_ACCESSED_MASK (1ull << 62) | ||
| 374 | #define VMX_EPT_FAKE_DIRTY_MASK (1ull << 63) | ||
| 375 | 373 | ||
| 376 | #define VMX_EPT_IDENTITY_PAGETABLE_ADDR 0xfffbc000ul | 374 | #define VMX_EPT_IDENTITY_PAGETABLE_ADDR 0xfffbc000ul |
| 377 | 375 | ||
