Preserve A/D bits for paging structure entries to avoid pointless writes to PTEs between test iterations, and more importantly to avoid triggering MMU syncs due to writing upper-level PTEs. Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> --- x86/access.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/x86/access.c b/x86/access.c index 53b1221..c4db368 100644 --- a/x86/access.c +++ b/x86/access.c @@ -609,7 +609,11 @@ static pt_element_t ac_get_pt(ac_test_t *at, int i, pt_element_t *ptep) abort(); } - pte = at->page_tables[i]; + /* + * Preserve A/D bits to avoid writing upper level PTEs, + * which cannot be unsyc'd when KVM uses shadow paging. + */ + pte = at->page_tables[i] | (pte & (PT_DIRTY_MASK | PT_ACCESSED_MASK)); return pte; } -- 2.34.0.rc2.393.gf8c9666880-goog