Skip to content
  • Wanpeng Li's avatar
    KVM: VMX: Fix enable VPID conditions · 08d839c4
    Wanpeng Li authored
    
    
    This can be reproduced by running L2 on L1, and disable VPID on L0
    if w/o commit "KVM: nVMX: Fix nested VPID vmx exec control", the L2
    crash as below:
    
    KVM: entry failed, hardware error 0x7
    EAX=00000000 EBX=00000000 ECX=00000000 EDX=000306c3
    ESI=00000000 EDI=00000000 EBP=00000000 ESP=00000000
    EIP=0000fff0 EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
    ES =0000 00000000 0000ffff 00009300
    CS =f000 ffff0000 0000ffff 00009b00
    SS =0000 00000000 0000ffff 00009300
    DS =0000 00000000 0000ffff 00009300
    FS =0000 00000000 0000ffff 00009300
    GS =0000 00000000 0000ffff 00009300
    LDT=0000 00000000 0000ffff 00008200
    TR =0000 00000000 0000ffff 00008b00
    GDT=     00000000 0000ffff
    IDT=     00000000 0000ffff
    CR0=60000010 CR2=00000000 CR3=00000000 CR4=00000000
    DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
    DR6=00000000ffff0ff0 DR7=0000000000000400
    EFER=0000000000000000
    
    Reference SDM 30.3 INVVPID:
    
    Protected Mode Exceptions
    - #UD
      - If not in VMX operation.
      - If the logical processor does not support VPIDs (IA32_VMX_PROCBASED_CTLS2[37]=0).
      - If the logical processor supports VPIDs (IA32_VMX_PROCBASED_CTLS2[37]=1) but does
        not support the INVVPID instruction (IA32_VMX_EPT_VPID_CAP[32]=0).
    
    So we should check both VPID enable bit in vmx exec control and INVVPID support bit
    in vmx capability MSRs to enable VPID. This patch adds the guarantee to not enable
    VPID if either INVVPID or single-context/all-context invalidation is not exposed in
    vmx capability MSRs.
    
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarJim Mattson <jmattson@google.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: default avatarWanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    08d839c4