• Cathy Avery's avatar
    KVM: SVM: Use a separate vmcb for the nested L2 guest · 4995a368
    Cathy Avery authored
    svm->vmcb will now point to a separate vmcb for L1 (not nested) or L2
    (nested).
    
    The main advantages are removing get_host_vmcb and hsave, in favor of
    concepts that are shared with VMX.
    
    We don't need anymore to stash the L1 registers in hsave while L2
    runs, but we need to copy the VMLOAD/VMSAVE registers from VMCB01 to
    VMCB02 and back.  This more or less has the same cost, but code-wise
    nested_svm_vmloadsave can be reused.
    
    This patch omits several optimizations that are possible:
    
    - for simplicity there is some wholesale copying of vmcb.control areas
    which can go away.
    
    - we should be able to better use the VMCB01 and VMCB02 clean bits.
    
    - another possibility is to always use VMCB01 for VMLOAD and VMSAVE,
    thus avoiding the copy of VMLOAD/VMSAVE registers from VMCB01 to
    VMCB02 and back.
    
    Tested:
    kvm-unit-tests
    kvm self tests
    Loaded fedora nested guest on fedora
    Signed-off-by: default avatarCathy Avery <cavery@redhat.com>
    Message-Id: <20201011184818.3609-3-cavery@redhat.com>
    [Fix conflicts; keep VMCB02 G_PAT up to date whenever guest writes the
     PAT MSR; do not copy CR4 over from VMCB01 as it is not needed anymore; add
     a few more comments. - Paolo]
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    4995a368
svm.c 123 KB