Hi Paolo, Thanks for your reply. On Wed, Oct 23, 2013 at 2:21 PM, Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > Il 21/10/2013 08:56, Arthur Chunqi Li ha scritto: >> Hi there, >> >> I noticed that kvm_mmu_reload() is called every time in vcpu enter, >> and kvm_mmu_load() is called in this function when root_hpa is >> INVALID_PAGE. I get confused why and when root_hpa can be set to >> INVALID_PAGE? I find one condition that if vcpu get request >> KVM_REQ_MMU_RELOAD, kvm_mmu_unload() is called to invalid root_hpa, >> but this condition cannot cover all occasions. > > Look also at mmu_free_roots, kvm_mmu_unload and kvm_mmu_reset_context. > In "normal" cases and without EPT, it should be called when CR3 changes > or when the paging mode changes (32-bit, PAE, 64-bit, no paging). With > EPT, this kind of change won't reset the MMU (CR3 changes won't cause a > vmexit at all, in fact). When EPT is enabled, why will root_hpa be set to INVALID_PAGE when a VM boots? I find that Qemu reset root_hpa with KVM_REQ_MMU_RELOAD request several time when booting a VM, why? And will VM use EPT from the very beginning when booting? > > With nested virtualization, roots are invalidated whenever kvm->arch.mmu > changes meaning from L1->L0 or L2->L0 or vice versa (in the special case > where EPT is disabled on L0, this is trivially because vmentry loads CR3 > from the vmcs02). Besides, in function tdp_page_fault(), I find two different execution flow which may not reach __direct_map() (which I think is the normal path to handle PF), they are fast_page_fault() and try_async_pf(). When will these two paths called when handling EPT page fault? Thanks, Arthur > > Paolo -- Arthur Chunqi Li Department of Computer Science School of EECS Peking University Beijing, China -- 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