On Mon, Dec 03, 2012 at 04:33:01PM +0800, Xiao Guangrong wrote: > Hi Marcelo, > > Thanks for your patience. I was reading your reply over and over again, i would > like to argue it more :). > Please see below. > > On 11/29/2012 08:21 AM, Marcelo Tosatti wrote: > > > > > https://lkml.org/lkml/2012/11/17/75 > > > > Does unshadowing work with large sptes at reexecute_instruction? That > > is, do we nuke any large read-only sptes that might be causing a certain > > gfn to be read-only? > > > > That is, following the sequence there, is the large read-only spte > > properly destroyed? > > Actually, sptes can not prevent gfn becoming writable, that means the gfn > can become writable *even if* it exists a spte which maps to the gfn. > > The condition that can prevent gfn becoming writable is, the gfn has been > shadowed, that means the gfn can not become writable if it exists a sp > with sp.gfn = gfn. > > Note, drop_spte does not remove any sp. So, either destroying spte or keeping > spte doest not have any affect for gfn write-protection. > > If luck enough, my point is right, the current code can do some optimizations > as below: > > if (level > PT_PAGE_TABLE_LEVEL && > - has_wrprotected_page(vcpu->kvm, gfn, level)) { > - ret = 1; > - drop_spte(vcpu->kvm, sptep); > - goto done; > - } > + has_wrprotected_page(vcpu->kvm, gfn, level)) > + return 0; > > > 1): we can return 0 instead of 1 to avoid unnecessary emulation. vcpu will refault > again then kvm will use small page. So on refault the large spte is nuked. That works, yes. > 2): need not do any change on the spte. -- 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