From mboxrd@z Thu Jan 1 00:00:00 1970 From: Xiao Guangrong Subject: Re: [PATCH v5 8/9] KVM: MMU: combine guest pte read between fetch and pte prefetch Date: Wed, 07 Jul 2010 09:23:15 +0800 Message-ID: <4C33D703.4090208@cn.fujitsu.com> References: <4C330918.6040709@cn.fujitsu.com> <4C330A9A.9030106@cn.fujitsu.com> <20100706195254.GA4311@amt.cnet> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: Avi Kivity , LKML , KVM list To: Marcelo Tosatti Return-path: In-Reply-To: <20100706195254.GA4311@amt.cnet> Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org 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. :-)