• Vitaly Kuznetsov's avatar
    KVM: nVMX: stop abusing need_vmcs12_to_shadow_sync for eVMCS mapping · e942dbf8
    Vitaly Kuznetsov authored
    When vmx_set_nested_state() happens, we may not have all the required
    data to map enlightened VMCS: e.g. HV_X64_MSR_VP_ASSIST_PAGE MSR may not
    yet be restored so we need a postponed action. Currently, we (ab)use
    need_vmcs12_to_shadow_sync/nested_sync_vmcs12_to_shadow() for that but
    this is not ideal:
    - We may not need to sync anything if L2 is running
    - It is hard to propagate errors from nested_sync_vmcs12_to_shadow()
     as we call it from vmx_prepare_switch_to_guest() which happens just
     before we do VMLAUNCH, the code is not ready to handle errors there.
    
    Move eVMCS mapping to nested_get_vmcs12_pages() and request
    KVM_REQ_GET_VMCS12_PAGES, it seems to be is less abusive in nature.
    It would probably be possible to introduce a specialized KVM_REQ_EVMCS_MAP
    but it is undesirable to propagate eVMCS specifics all the way up to x86.c
    
    Note, we don't need to request KVM_REQ_GET_VMCS12_PAGES from
    vmx_set_nested_state() directly as nested_vmx_enter_non_root_mode() already
    does that. Requesting KVM_REQ_GET_VMCS12_PAGES is done to document the
    (non-obvious) side-effect and to be future proof.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    e942dbf8
nested.c 192 KB