lkml.org 
[lkml]   [2010]   [Nov]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 2/3] KVM: MMU: don not retry #PF for nonpaging guest
    On 11/09/2010 06:51 PM, Gleb Natapov wrote:
    > On Tue, Nov 09, 2010 at 05:52:40PM +0800, Xiao Guangrong wrote:
    >>>>>> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
    >>>>>> index 7f20f2c..606978e 100644
    >>>>>> --- a/arch/x86/include/asm/kvm_host.h
    >>>>>> +++ b/arch/x86/include/asm/kvm_host.h
    >>>>>> @@ -600,6 +600,7 @@ struct kvm_x86_ops {
    >>>>>> struct kvm_arch_async_pf {
    >>>>>> u32 token;
    >>>>>> gfn_t gfn;
    >>>>>> + bool softmmu;
    >>>>>> };
    >>>>>>
    >>>>>> extern struct kvm_x86_ops *kvm_x86_ops;
    >>>>>> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
    >>>>>> index f3fad4f..48ca312 100644
    >>>>>> --- a/arch/x86/kvm/mmu.c
    >>>>>> +++ b/arch/x86/kvm/mmu.c
    >>>>>> static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn)
    >>>>>> @@ -2602,6 +2607,7 @@ static int kvm_arch_setup_async_pf(struct kvm_vcpu *vcpu, gva_t gva, gfn_t gfn)
    >>>>>> struct kvm_arch_async_pf arch;
    >>>>>> arch.token = (vcpu->arch.apf.id++ << 12) | vcpu->vcpu_id;
    >>>>>> arch.gfn = gfn;
    >>>>>> + arch.softmmu = mmu_is_softmmu(vcpu);
    >>>>>>
    >>>>> We can do:
    >>>>> if (mmu_is_nested(vcpu))
    >>>>> gva = vcpu->mmu.gva_to_gpa(gva);
    >>>>> And this should fix everything no?
    >>>>>
    >>>>
    >>>> No, since it can't help us to avoid NPF when nested guest run again.
    >>>>
    >>> Of course it will not prevent NPF if L2 guest touches it again, but from
    >>> correctness point of view it is OK. So if L1 will re-use the page for
    >>> L1 process the page will be already mapped. Not a huge gain I agree, but
    >>> fix is much more simple.
    >>>
    >>
    >> Um, it need hold mmu_lock, and we don't know 'gva''s mapping in PT10 is valid
    >> or not, also don't know whether it can be accessed later, so the general rule
    >> is lazily update it.
    >>
    > We do know that gva's mapping in PT10 is valid since we wouldn't try apf
    > otherwise. If nested gpa is mapped to a gpa thst is not valid in L0 then
    > L0 should emulate instruction for L2, no?
    >

    No need.

    >> The more important is that we can prefault for softmmu in the later patch,
    >> it means we can prefault 'gva' in PT20, so don't cook gva here.
    >>
    > So may be just apply second patch then?
    >

    Yes, i think so.


    \
     
     \ /
      Last update: 2010-11-10 03:07    [W:3.077 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site