Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit daa3db69 authored by Xiao Guangrong's avatar Xiao Guangrong Committed by Avi Kivity
Browse files

KVM: MMU: fix broken page accessed tracking with ept enabled



In current code, if ept is enabled(shadow_accessed_mask = 0), the page
accessed tracking is lost.

Signed-off-by: default avatarXiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent fa1de2bf
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -687,7 +687,7 @@ static void drop_spte(struct kvm *kvm, u64 *sptep, u64 new_spte)
	if (!is_rmap_spte(old_spte))
		return;
	pfn = spte_to_pfn(old_spte);
	if (old_spte & shadow_accessed_mask)
	if (!shadow_accessed_mask || old_spte & shadow_accessed_mask)
		kvm_set_pfn_accessed(pfn);
	if (is_writable_pte(old_spte))
		kvm_set_pfn_dirty(pfn);
@@ -815,7 +815,8 @@ static int kvm_set_pte_rmapp(struct kvm *kvm, unsigned long *rmapp,
				kvm_set_pfn_dirty(spte_to_pfn(*spte));
			old_spte = __xchg_spte(spte, new_spte);
			if (is_shadow_present_pte(old_spte)
			    && (old_spte & shadow_accessed_mask))
			    && (!shadow_accessed_mask ||
			    old_spte & shadow_accessed_mask))
				mark_page_accessed(pfn_to_page(spte_to_pfn(old_spte)));
			spte = rmap_next(kvm, rmapp, spte);
		}