aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Kivity <avi@qumranet.com>2008-04-03 12:02:21 +0300
committerAvi Kivity <avi@qumranet.com>2008-04-27 12:00:57 +0300
commitfcd6dbac9267c1c06a205ad8bb4bd027c0ace7f7 (patch)
treea9645557d1d20d344f21ab464137a64896598d58
parentd39f13b0da7fa7f705fbe6c80995205d0380bc7a (diff)
downloadkernel_samsung_smdk4412-fcd6dbac9267c1c06a205ad8bb4bd027c0ace7f7.zip
kernel_samsung_smdk4412-fcd6dbac9267c1c06a205ad8bb4bd027c0ace7f7.tar.gz
kernel_samsung_smdk4412-fcd6dbac9267c1c06a205ad8bb4bd027c0ace7f7.tar.bz2
KVM: MMU: Only mark_page_accessed() if the page was accessed by the guest
If the accessed bit is not set, the guest has never accessed this page (at least through this spte), so there's no need to mark the page accessed. This provides more accurate data for the eviction algortithm. Noted by Andrea Arcangeli. Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r--arch/x86/kvm/mmu.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 1594ee0..5c4c166 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -549,7 +549,8 @@ static void rmap_remove(struct kvm *kvm, u64 *spte)
return;
sp = page_header(__pa(spte));
page = spte_to_page(*spte);
- mark_page_accessed(page);
+ if (*spte & PT_ACCESSED_MASK)
+ mark_page_accessed(page);
if (is_writeble_pte(*spte))
kvm_release_page_dirty(page);
else