lkml.org 
[lkml]   [2009]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 21/40] KVM: MMU: Segregate mmu pages created with different cr4.pge settings
    Date
    Don't allow a vcpu with cr4.pge cleared to use a shadow page created with
    cr4.pge set; this might cause a cr3 switch not to sync ptes that have the
    global bit set (the global bit has no effect if !cr4.pge).

    This can only occur on smp with different cr4.pge settings for different
    vcpus (since a cr4 change will resync the shadow ptes), but there's no
    cost to being correct here.

    Signed-off-by: Avi Kivity <avi@redhat.com>
    ---
    arch/x86/include/asm/kvm_host.h | 1 +
    arch/x86/kvm/x86.c | 1 +
    2 files changed, 2 insertions(+), 0 deletions(-)

    diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
    index 28f875f..c2a01d0 100644
    --- a/arch/x86/include/asm/kvm_host.h
    +++ b/arch/x86/include/asm/kvm_host.h
    @@ -183,6 +183,7 @@ union kvm_mmu_page_role {
    unsigned metaphysical:1;
    unsigned access:3;
    unsigned invalid:1;
    + unsigned cr4_pge:1;
    };
    };

    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index 2477e87..873602b 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -364,6 +364,7 @@ void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
    }
    kvm_x86_ops->set_cr4(vcpu, cr4);
    vcpu->arch.cr4 = cr4;
    + vcpu->arch.mmu.base_role.cr4_pge = !!(cr4 & X86_CR4_PGE);
    kvm_mmu_sync_global(vcpu);
    kvm_mmu_reset_context(vcpu);
    }
    --
    1.6.0.6


    \
     
     \ /
      Last update: 2009-02-26 15:21    [W:2.866 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site