Marcelo Tosatti wrote: >> - >> - first_pte_gpa = gfn_to_gpa(sp->gfn) + >> - (offset + i) * sizeof(pt_element_t); >> - >> - if (kvm_read_guest_atomic(vcpu->kvm, first_pte_gpa, gptep, >> - sizeof(gptep)) < 0) >> - return; >> + gptep = gw->prefetch_ptes; > > Where do you reread the gpte in the prefetch path? > Marcelo, Thanks for your review. Below codes read gptes in the prefetch path: index = sptep - sp->spt; i = index & ~(PTE_PREFETCH_NUM - 1); max = index | (PTE_PREFETCH_NUM - 1); if (PTTYPE == 32) offset = sp->role.quadrant << PT64_LEVEL_BITS; first_pte_gpa = gfn_to_gpa(sp->gfn) + (offset + i) * sizeof(pt_element_t); if (kvm_read_guest_atomic(vcpu->kvm, first_pte_gpa, gptep, sizeof(gptep)) < 0) return; It reads the 16 aligned items around sptep's corresponding gpte and this gpte is also in this area. :-) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html