On 11/23/2009 04:06 PM, Gleb Natapov wrote:
When page is swapped in it is mapped into guest memory only after guest tries to access it again and generate another fault. To save this fault we can map it immediately since we know that guest is going to access the page. -static int tdp_page_fault(struct kvm_vcpu *vcpu, gva_t gpa, +static int tdp_page_fault(struct kvm_vcpu *vcpu, gpa_t cr3, gva_t gpa, u32 error_code) { pfn_t pfn; @@ -2230,7 +2233,7 @@ static int tdp_page_fault(struct kvm_vcpu *vcpu, gva_t gpa, mmu_seq = vcpu->kvm->mmu_notifier_seq; smp_rmb(); - if (can_do_async_pf(vcpu)) { + if (cr3 == vcpu->arch.cr3&& can_do_async_pf(vcpu)) {
Why check cr3 here?
-static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gva_t addr, +static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gpa_t cr3, gva_t addr, u32 error_code)
I'd be slightly happier if we had a page_fault_other_cr3() op that switched cr3, called the original, then switched back (the tdp version need not change anything).
-- error compiling committee.c: too many arguments to function -- 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