lkml.org 
[lkml]   [2010]   [Feb]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/11] KVM: SVM: Activate nested state only when guest state is complete
    Date
    Certain functions called during the emulated world switch
    behave differently when the vcpu is running nested. This is
    not the expected behavior during a world switch emulation.
    This patch ensures that the nested state is activated only
    if the vcpu is completly in nested state.

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    ---
    arch/x86/kvm/svm.c | 15 +++++++++------
    1 files changed, 9 insertions(+), 6 deletions(-)

    diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
    index d7b75fb..4e8d42b 100644
    --- a/arch/x86/kvm/svm.c
    +++ b/arch/x86/kvm/svm.c
    @@ -1628,6 +1628,9 @@ static int nested_svm_vmexit(struct vcpu_svm *svm)
    if (!nested_vmcb)
    return 1;

    + /* Exit nested SVM mode */
    + svm->nested.vmcb = 0;
    +
    /* Give the current vmcb to the guest */
    disable_gif(svm);

    @@ -1715,9 +1718,6 @@ static int nested_svm_vmexit(struct vcpu_svm *svm)
    svm->vmcb->save.cpl = 0;
    svm->vmcb->control.exit_int_info = 0;

    - /* Exit nested SVM mode */
    - svm->nested.vmcb = 0;
    -
    nested_svm_unmap(page);

    kvm_mmu_reset_context(&svm->vcpu);
    @@ -1752,14 +1752,14 @@ static bool nested_svm_vmrun(struct vcpu_svm *svm)
    struct vmcb *hsave = svm->nested.hsave;
    struct vmcb *vmcb = svm->vmcb;
    struct page *page;
    + u64 vmcb_gpa;
    +
    + vmcb_gpa = svm->vmcb->save.rax;

    nested_vmcb = nested_svm_map(svm, svm->vmcb->save.rax, &page);
    if (!nested_vmcb)
    return false;

    - /* nested_vmcb is our indicator if nested SVM is activated */
    - svm->nested.vmcb = svm->vmcb->save.rax;
    -
    trace_kvm_nested_vmrun(svm->vmcb->save.rip - 3, svm->nested.vmcb,
    nested_vmcb->save.rip,
    nested_vmcb->control.int_ctl,
    @@ -1874,6 +1874,9 @@ static bool nested_svm_vmrun(struct vcpu_svm *svm)

    nested_svm_unmap(page);

    + /* nested_vmcb is our indicator if nested SVM is activated */
    + svm->nested.vmcb = vmcb_gpa;
    +
    enable_gif(svm);

    return true;
    --
    1.6.6



    \
     
     \ /
      Last update: 2010-02-19 16:27    [W:2.202 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site