• Vitaly Kuznetsov's avatar
    KVM: x86: nSVM: fix switch to guest mmu · 3cf85f9f
    Vitaly Kuznetsov authored
    Recent optimizations in MMU code broke nested SVM with NPT in L1
    completely: when we do nested_svm_{,un}init_mmu_context() we want
    to switch from TDP MMU to shadow MMU, both init_kvm_tdp_mmu() and
    kvm_init_shadow_mmu() check if re-configuration is needed by looking
    at cache source data. The data, however, doesn't change - it's only
    the type of the MMU which changes. We end up not re-initializing
    guest MMU as shadow and everything goes off the rails.
    
    The issue could have been fixed by putting MMU type into extended MMU
    role but this is not really needed. We can just split root and guest MMUs
    the exact same way we did for nVMX, their types never change in the
    lifetime of a vCPU.
    
    There is still room for improvement: currently, we reset all MMU roots
    when switching from L1 to L2 and back and this is not needed.
    
    Fixes: 7dcd5755 ("x86/kvm/mmu: check if tdp/shadow MMU reconfiguration is needed")
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    3cf85f9f
svm.c 183 KB