Messages in this thread | | | Date | Mon, 05 Jul 2010 12:20:48 +0300 | From | Avi Kivity <> | Subject | Re: [PATCH v4 5/6] KVM: MMU: combine guest pte read between walk and pte prefetch |
| |
On 07/05/2010 12:09 PM, Xiao Guangrong wrote: > > Avi Kivity wrote: > > >> I'm not convinced we can bypass the checks. Consider: >> >> >> VCPU0 VCPU1 >> >> #PF >> walk_addr >> -> gpml4e0,gpdpe0,gpde0,gpte0 >> >> replace gpdpe0 with gpdpe1 >> #PF >> walk_addr >> -> gpml4e0,gpdpe1,gpde1,gpte1 >> fetch >> -> establish hpml4e0,hpdpte1,hpde0,hpte1 >> fetch >> read hpdpe1 >> if (present(hpdpe1)) >> continue; >> ... >> write hpte0 using shadow hieratchy for hpte1 >> >> > Ah, i missed this case, thanks for you point it out, i'll fix it in > the next version. >
Note: I think we have to check _after_ kvm_mmu_get_page(), otherwise we might be checking a page that is not write-protected and can change again.
So the logic needs to be something like
for_each_shadow_entry: if (!last_level && !present(*spte)) kvm_mmu_get_page verify gpte if (last_level) mmu_set_spte()
-- error compiling committee.c: too many arguments to function
| |