diff options
-rw-r--r-- | arch/x86/kvm/mmu.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 913ef4b7939a..b8da6715d08b 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -838,9 +838,15 @@ static int kvm_age_rmapp(struct kvm *kvm, unsigned long *rmapp, | |||
838 | u64 *spte; | 838 | u64 *spte; |
839 | int young = 0; | 839 | int young = 0; |
840 | 840 | ||
841 | /* always return old for EPT */ | 841 | /* |
842 | * Emulate the accessed bit for EPT, by checking if this page has | ||
843 | * an EPT mapping, and clearing it if it does. On the next access, | ||
844 | * a new EPT mapping will be established. | ||
845 | * This has some overhead, but not as much as the cost of swapping | ||
846 | * out actively used pages or breaking up actively used hugepages. | ||
847 | */ | ||
842 | if (!shadow_accessed_mask) | 848 | if (!shadow_accessed_mask) |
843 | return 0; | 849 | return kvm_unmap_rmapp(kvm, rmapp, data); |
844 | 850 | ||
845 | spte = rmap_next(kvm, rmapp, NULL); | 851 | spte = rmap_next(kvm, rmapp, NULL); |
846 | while (spte) { | 852 | while (spte) { |