qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] target/i386: add VMX features to named CPU models


From: Daniel P . Berrangé
Subject: Re: [PATCH] target/i386: add VMX features to named CPU models
Date: Wed, 20 Nov 2019 17:50:02 +0000
User-agent: Mutt/1.12.1 (2019-06-15)

On Wed, Nov 20, 2019 at 06:37:53PM +0100, Paolo Bonzini wrote:
> This allows using "-cpu Haswell,+vmx", which we did not really want to
> support in QEMU but was produced by Libvirt when using the "host-model"
> CPU model.

Can you say what is currently broken ?  If I launch my current QEMU (I have
4.1.1 on Fedora 31):

 qemu-system-x86_64 -cpu Haswell,+vmx

... I don't get any reported errors.

> 
> This was produced from the output of scripts/kvm/vmxcap using the following
> very ugly Python script:
> 
>     bits = {
>             'INS/OUTS instruction information': ['FEAT_VMX_BASIC', 
> 'MSR_VMX_BASIC_INS_OUTS'],
>             'IA32_VMX_TRUE_*_CTLS support': ['FEAT_VMX_BASIC', 
> 'MSR_VMX_BASIC_TRUE_CTLS'],
>             'External interrupt exiting': ['FEAT_VMX_PINBASED_CTLS', 
> 'VMX_PIN_BASED_EXT_INTR_MASK'],
>             'NMI exiting': ['FEAT_VMX_PINBASED_CTLS', 
> 'VMX_PIN_BASED_NMI_EXITING'],
>             'Virtual NMIs': ['FEAT_VMX_PINBASED_CTLS', 
> 'VMX_PIN_BASED_VIRTUAL_NMIS'],
>             'Activate VMX-preemption timer': ['FEAT_VMX_PINBASED_CTLS', 
> 'VMX_PIN_BASED_VMX_PREEMPTION_TIMER'],
>             'Process posted interrupts': ['FEAT_VMX_PINBASED_CTLS', 
> 'VMX_PIN_BASED_POSTED_INTR'],
>             'Interrupt window exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_VIRTUAL_INTR_PENDING'],
>             'Use TSC offsetting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_USE_TSC_OFFSETING'],
>             'HLT exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_HLT_EXITING'],
>             'INVLPG exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_INVLPG_EXITING'],
>             'MWAIT exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_MWAIT_EXITING'],
>             'RDPMC exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_RDPMC_EXITING'],
>             'RDTSC exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_RDTSC_EXITING'],
>             'CR3-load exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_CR3_LOAD_EXITING'],
>             'CR3-store exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_CR3_STORE_EXITING'],
>             'CR8-load exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_CR8_LOAD_EXITING'],
>             'CR8-store exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_CR8_STORE_EXITING'],
>             'Use TPR shadow': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_TPR_SHADOW'],
>             'NMI-window exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_VIRTUAL_NMI_PENDING'],
>             'MOV-DR exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_MOV_DR_EXITING'],
>             'Unconditional I/O exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_UNCOND_IO_EXITING'],
>             'Use I/O bitmaps': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_USE_IO_BITMAPS'],
>             'Monitor trap flag': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_MONITOR_TRAP_FLAG'],
>             'Use MSR bitmaps': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_USE_MSR_BITMAPS'],
>             'MONITOR exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_MONITOR_EXITING'],
>             'PAUSE exiting': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_PAUSE_EXITING'],
>             'Activate secondary control': ['FEAT_VMX_PROCBASED_CTLS', 
> 'VMX_CPU_BASED_ACTIVATE_SECONDARY_CONTROLS'],
>             'Virtualize APIC accesses': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES'],
>             'Enable EPT': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_ENABLE_EPT'],
>             'Descriptor-table exiting': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_DESC'],
>             'Enable RDTSCP': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_RDTSCP'],
>             'Virtualize x2APIC mode': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE'],
>             'Enable VPID': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_ENABLE_VPID'],
>             'WBINVD exiting': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_WBINVD_EXITING'],
>             'Unrestricted guest': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST'],
>             'APIC register emulation': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT'],
>             'Virtual interrupt delivery': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY'],
>             'PAUSE-loop exiting': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING'],
>             'RDRAND exiting': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_RDRAND_EXITING'],
>             'Enable INVPCID': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_ENABLE_INVPCID'],
>             'Enable VM functions': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_ENABLE_VMFUNC'],
>             'VMCS shadowing': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_SHADOW_VMCS'],
>             'RDSEED exiting': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_RDSEED_EXITING'],
>             'Enable PML': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_ENABLE_PML'],
>             'Enable XSAVES/XRSTORS': ['FEAT_VMX_SECONDARY_CTLS', 
> 'VMX_SECONDARY_EXEC_XSAVES'],
>             'Save debug controls': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_SAVE_DEBUG_CONTROLS'],
>             'Host address-space size': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE'],
>             'Load IA32_PERF_GLOBAL_CTRL': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL'],
>             'Acknowledge interrupt on exit': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_ACK_INTR_ON_EXIT'],
>             'Save IA32_PAT': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_SAVE_IA32_PAT'],
>             'Load IA32_PAT': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_LOAD_IA32_PAT'],
>             'Save IA32_EFER': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_SAVE_IA32_EFER'],
>             'Load IA32_EFER': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_LOAD_IA32_EFER'],
>             'Save VMX-preemption timer value': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER'],
>             'Clear IA32_BNDCFGS': ['FEAT_VMX_EXIT_CTLS', 
> 'VMX_VM_EXIT_CLEAR_BNDCFGS'],
>             'Load debug controls': ['FEAT_VMX_ENTRY_CTLS', 
> 'VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS'],
>             'IA-32e mode guest': ['FEAT_VMX_ENTRY_CTLS', 
> 'VMX_VM_ENTRY_IA32E_MODE'],
>             'Load IA32_PERF_GLOBAL_CTRL': ['FEAT_VMX_ENTRY_CTLS', 
> 'VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL'],
>             'Load IA32_PAT': ['FEAT_VMX_ENTRY_CTLS', 
> 'VMX_VM_ENTRY_LOAD_IA32_PAT'],
>             'Load IA32_EFER': ['FEAT_VMX_ENTRY_CTLS', 
> 'VMX_VM_ENTRY_LOAD_IA32_EFER'],
>             'Load IA32_BNDCFGS': ['FEAT_VMX_ENTRY_CTLS', 
> 'VMX_VM_ENTRY_LOAD_BNDCFGS'],
>             'Store EFER.LMA into IA-32e mode guest control': 
> ['FEAT_VMX_MISC', 'MSR_VMX_MISC_STORE_LMA'],
>             'HLT activity state': ['FEAT_VMX_MISC', 
> 'MSR_VMX_MISC_ACTIVITY_HLT'],
>             'VMWRITE to VM-exit information fields': ['FEAT_VMX_MISC', 
> 'MSR_VMX_MISC_VMWRITE_VMEXIT'],
>             'Inject event with insn length=0': ['FEAT_VMX_MISC', 
> 'MSR_VMX_MISC_ZERO_LEN_INJECT'],
>             'Execute-only EPT translations': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_EXECONLY'],
>             'Page-walk length 4': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_PAGE_WALK_LENGTH_4'],
>             'Paging-structure memory type WB': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_WB'],
>             '2MB EPT pages': ['FEAT_VMX_EPT_VPID_CAPS', 'MSR_VMX_EPT_2MB | 
> MSR_VMX_EPT_1GB'],
>             'INVEPT supported': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_INVEPT'],
>             'EPT accessed and dirty flags': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_AD_BITS'],
>             'Single-context INVEPT': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT'],
>             'All-context INVEPT': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_INVEPT_ALL_CONTEXT'],
>             'INVVPID supported': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_INVVPID'],
>             'Individual-address INVVPID': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_INVVPID_SINGLE_ADDR'],
>             'Single-context INVVPID': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT'],
>             'All-context INVVPID': ['FEAT_VMX_EPT_VPID_CAPS', 
> 'MSR_VMX_EPT_INVVPID_ALL_CONTEXT'],
>             'Single-context-retaining-globals INVVPID': 
> ['FEAT_VMX_EPT_VPID_CAPS', 'MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS'],
>             'EPTP Switching': ['FEAT_VMX_VMFUNC', 
> 'MSR_VMX_VMFUNC_EPT_SWITCHING']
>     }
> 
>     import sys
>     import textwrap
> 
>     out = {}
>     for l in sys.stdin.readlines():
>         l = l.rstrip()
>         if l.endswith('!!'):
>             l = l[:-2].rstrip()
>         if l.startswith('    ') and (l.endswith('default') or 
> l.endswith('yes')):
>             l = l[4:]
>             for key, value in bits.items():
>                 if l.startswith(key):
>                     ctl, bit = value
>                     if ctl in out:
>                         out[ctl] = out[ctl] + ' | '
>                     else:
>                         out[ctl] = '    [%s] = ' % ctl
>                     out[ctl] = out[ctl] + bit
> 
>     for x in sorted(out.keys()):
>         print("\n         ".join(textwrap.wrap(out[x] + ",")))
> 
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
>  target/i386/cpu.c | 674 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 674 insertions(+)
> 
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 8447f4b82c..0f38c82903 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -1873,6 +1873,24 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
>          .features[FEAT_8000_0001_ECX] =
>              CPUID_EXT3_LAHF_LM,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES,
>          .xlevel = 0x80000008,
>          .model_id = "Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz",
>      },
> @@ -1900,6 +1918,21 @@ static X86CPUDefinition builtin_x86_defs[] = {
>                      CPUID_EXT3_OSVW, CPUID_EXT3_IBS, CPUID_EXT3_SVM */
>          .features[FEAT_8000_0001_ECX] =
>              0,
> +        /* VMX features from Cedar Mill/Prescott */
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING,
>          .xlevel = 0x80000008,
>          .model_id = "Common KVM processor"
>      },
> @@ -1931,6 +1964,20 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_EXT_SSE3,
>          .features[FEAT_8000_0001_ECX] =
>              0,
> +        /* VMX features from Yonah */
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_MOV_DR_EXITING | VMX_CPU_BASED_UNCOND_IO_EXITING |
> +             VMX_CPU_BASED_USE_IO_BITMAPS | VMX_CPU_BASED_MONITOR_EXITING |
> +             VMX_CPU_BASED_PAUSE_EXITING | VMX_CPU_BASED_USE_MSR_BITMAPS,
>          .xlevel = 0x80000008,
>          .model_id = "Common 32-bit KVM processor"
>      },
> @@ -1952,6 +1999,19 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_EXT_SSE3 | CPUID_EXT_MONITOR,
>          .features[FEAT_8000_0001_EDX] =
>              CPUID_EXT2_NX,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_MOV_DR_EXITING | VMX_CPU_BASED_UNCOND_IO_EXITING |
> +             VMX_CPU_BASED_USE_IO_BITMAPS | VMX_CPU_BASED_MONITOR_EXITING |
> +             VMX_CPU_BASED_PAUSE_EXITING | VMX_CPU_BASED_USE_MSR_BITMAPS,
>          .xlevel = 0x80000008,
>          .model_id = "Genuine Intel(R) CPU           T2600  @ 2.16GHz",
>      },
> @@ -2062,6 +2122,24 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL,
>          .features[FEAT_8000_0001_ECX] =
>              CPUID_EXT3_LAHF_LM,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Celeron_4x0 (Conroe/Merom Class Core 2)",
>      },
> @@ -2085,6 +2163,27 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_EXT2_LM | CPUID_EXT2_NX | CPUID_EXT2_SYSCALL,
>          .features[FEAT_8000_0001_ECX] =
>              CPUID_EXT3_LAHF_LM,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Core 2 Duo P9xxx (Penryn Class Core 2)",
>      },
> @@ -2108,6 +2207,45 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
>          .features[FEAT_8000_0001_ECX] =
>              CPUID_EXT3_LAHF_LM,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Core i7 9xx (Nehalem Class Core i7)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2148,6 +2286,47 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_EXT3_LAHF_LM,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING,
>          .xlevel = 0x80000008,
>          .model_id = "Westmere E56xx/L56xx/X56xx (Nehalem-C)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2193,6 +2372,47 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XSAVEOPT,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Xeon E312xx (Sandy Bridge)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2241,6 +2461,50 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XSAVEOPT,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER | VMX_PIN_BASED_POSTED_INTR,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
> +             VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Xeon E3-12xx v2 (Ivy Bridge)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2292,6 +2556,52 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XSAVEOPT,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER | VMX_PIN_BASED_POSTED_INTR,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
> +             VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
> +        .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Core Processor (Haswell)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2376,6 +2686,52 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XSAVEOPT,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER | VMX_PIN_BASED_POSTED_INTR,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
> +             VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
> +        .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Core Processor (Broadwell)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2460,6 +2816,50 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XGETBV1,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        /* Missing: Mode-based execute control (XS/XU), processor tracing, 
> TSC scaling */
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
> +        .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Core Processor (Skylake)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2524,6 +2924,52 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XGETBV1,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        /* Missing: Mode-based execute control (XS/XU), processor tracing, 
> TSC scaling */
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER | VMX_PIN_BASED_POSTED_INTR,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
> +             VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Xeon Processor (Skylake)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2594,6 +3040,52 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XGETBV1,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        /* Missing: Mode-based execute control (XS/XU), processor tracing, 
> TSC scaling */
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER | VMX_PIN_BASED_POSTED_INTR,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
> +             VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Xeon Processor (Cascadelake)",
>          .versions = (X86CPUVersionDefinition[]) {
> @@ -2663,6 +3155,50 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XGETBV1,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        /* Missing: Mode-based execute control (XS/XU), processor tracing, 
> TSC scaling */
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
> +        .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Core Processor (Icelake)",
>      },
> @@ -2721,6 +3257,52 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XGETBV1,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        /* Missing: Mode-based execute control (XS/XU), processor tracing, 
> TSC scaling */
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER | VMX_PIN_BASED_POSTED_INTR,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
> +             VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Xeon Processor (Icelake)",
>      },
> @@ -2768,6 +3350,52 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_6_EAX_ARAT,
>          .features[FEAT_ARCH_CAPABILITIES] =
>              MSR_ARCH_CAP_RDCL_NO | MSR_ARCH_CAP_SKIP_L1DFL_VMENTRY,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER | VMX_PIN_BASED_POSTED_INTR,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
> +             VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
> +        .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Atom Processor (Denverton)",
>      },
> @@ -2838,6 +3466,52 @@ static X86CPUDefinition builtin_x86_defs[] = {
>              CPUID_XSAVE_XGETBV1,
>          .features[FEAT_6_EAX] =
>              CPUID_6_EAX_ARAT,
> +        .features[FEAT_VMX_BASIC] = MSR_VMX_BASIC_INS_OUTS |
> +             MSR_VMX_BASIC_TRUE_CTLS,
> +        .features[FEAT_VMX_ENTRY_CTLS] = VMX_VM_ENTRY_IA32E_MODE |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL |
> +             VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | 
> VMX_VM_ENTRY_LOAD_IA32_PAT |
> +             VMX_VM_ENTRY_LOAD_IA32_EFER | VMX_VM_ENTRY_LOAD_DEBUG_CONTROLS |
> +             VMX_VM_ENTRY_LOAD_IA32_PAT | VMX_VM_ENTRY_LOAD_IA32_EFER,
> +        .features[FEAT_VMX_EPT_VPID_CAPS] = MSR_VMX_EPT_EXECONLY |
> +             MSR_VMX_EPT_PAGE_WALK_LENGTH_4 | MSR_VMX_EPT_WB | 
> MSR_VMX_EPT_2MB |
> +             MSR_VMX_EPT_1GB | MSR_VMX_EPT_INVEPT |
> +             MSR_VMX_EPT_INVEPT_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVEPT_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID | MSR_VMX_EPT_INVVPID_SINGLE_ADDR |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT | 
> MSR_VMX_EPT_INVVPID_ALL_CONTEXT |
> +             MSR_VMX_EPT_INVVPID_SINGLE_CONTEXT_NOGLOBALS | 
> MSR_VMX_EPT_AD_BITS,
> +        .features[FEAT_VMX_EXIT_CTLS] = VMX_VM_EXIT_HOST_ADDR_SPACE_SIZE |
> +             VMX_VM_EXIT_ACK_INTR_ON_EXIT | VMX_VM_EXIT_SAVE_DEBUG_CONTROLS |
> +             VMX_VM_EXIT_SAVE_IA32_PAT | VMX_VM_EXIT_SAVE_IA32_EFER |
> +             VMX_VM_EXIT_SAVE_VMX_PREEMPTION_TIMER,
> +        .features[FEAT_VMX_MISC] = MSR_VMX_MISC_ACTIVITY_HLT |
> +             MSR_VMX_MISC_STORE_LMA | MSR_VMX_MISC_VMWRITE_VMEXIT,
> +        .features[FEAT_VMX_PINBASED_CTLS] = VMX_PIN_BASED_EXT_INTR_MASK |
> +             VMX_PIN_BASED_NMI_EXITING | VMX_PIN_BASED_VIRTUAL_NMIS |
> +             VMX_PIN_BASED_VMX_PREEMPTION_TIMER | VMX_PIN_BASED_POSTED_INTR,
> +        .features[FEAT_VMX_PROCBASED_CTLS] = 
> VMX_CPU_BASED_VIRTUAL_INTR_PENDING |
> +             VMX_CPU_BASED_USE_TSC_OFFSETING | VMX_CPU_BASED_HLT_EXITING |
> +             VMX_CPU_BASED_INVLPG_EXITING | VMX_CPU_BASED_MWAIT_EXITING |
> +             VMX_CPU_BASED_RDPMC_EXITING | VMX_CPU_BASED_RDTSC_EXITING |
> +             VMX_CPU_BASED_CR8_LOAD_EXITING | 
> VMX_CPU_BASED_CR8_STORE_EXITING |
> +             VMX_CPU_BASED_TPR_SHADOW | VMX_CPU_BASED_MOV_DR_EXITING |
> +             VMX_CPU_BASED_UNCOND_IO_EXITING | VMX_CPU_BASED_USE_IO_BITMAPS |
> +             VMX_CPU_BASED_MONITOR_EXITING | VMX_CPU_BASED_PAUSE_EXITING |
> +             VMX_CPU_BASED_VIRTUAL_NMI_PENDING | 
> VMX_CPU_BASED_USE_MSR_BITMAPS |
> +             VMX_CPU_BASED_CR3_LOAD_EXITING | 
> VMX_CPU_BASED_CR3_STORE_EXITING |
> +             VMX_CPU_BASED_MONITOR_TRAP_FLAG,
> +        .features[FEAT_VMX_SECONDARY_CTLS] =
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES |
> +             VMX_SECONDARY_EXEC_WBINVD_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_EPT |
> +             VMX_SECONDARY_EXEC_DESC | VMX_SECONDARY_EXEC_RDTSCP |
> +             VMX_SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE |
> +             VMX_SECONDARY_EXEC_ENABLE_VPID | 
> VMX_SECONDARY_EXEC_UNRESTRICTED_GUEST |
> +             VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING |
> +             VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT |
> +             VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
> +             VMX_SECONDARY_EXEC_RDRAND_EXITING | 
> VMX_SECONDARY_EXEC_ENABLE_INVPCID |
> +             VMX_SECONDARY_EXEC_ENABLE_VMFUNC | 
> VMX_SECONDARY_EXEC_SHADOW_VMCS,
> +        .features[FEAT_VMX_VMFUNC] = MSR_VMX_VMFUNC_EPT_SWITCHING,
>          .xlevel = 0x80000008,
>          .model_id = "Intel Atom Processor (SnowRidge)",
>          .versions = (X86CPUVersionDefinition[]) {
> -- 
> 2.21.0
> 
> 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




reply via email to

[Prev in Thread] Current Thread [Next in Thread]