vmcs_config
return vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_EFER;
return vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL;
return (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_CET_STATE);
return vmcs_config.vmexit_ctrl & VM_EXIT_SAVE_IA32_PERF_GLOBAL_CTRL;
return vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_BNDCFGS;
return vmcs_config.cpu_based_exec_ctrl & CPU_BASED_TPR_SHADOW;
return vmcs_config.cpu_based_exec_ctrl & CPU_BASED_USE_MSR_BITMAPS;
return vmcs_config.cpu_based_exec_ctrl &
return vmcs_config.cpu_based_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
(vmcs_config.cpu_based_2nd_exec_ctrl & SECONDARY_EXEC_DESC);
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
if (!(vmcs_config.misc & VMX_MISC_VMWRITE_SHADOW_RO_FIELDS))
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl & SECONDARY_EXEC_ENABLE_PML;
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_2nd_exec_ctrl &
return vmcs_config.cpu_based_3rd_exec_ctrl & TERTIARY_EXEC_IPI_VIRT;
return (vmcs_config.misc & VMX_MISC_INTEL_PT) &&
(vmcs_config.cpu_based_2nd_exec_ctrl & SECONDARY_EXEC_PT_USE_GPA) &&
(vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_RTIT_CTL);
return vmcs_config.cpu_based_2nd_exec_ctrl &
extern struct vmcs_config vmcs_config __ro_after_init;
return vmcs_config.basic & VMX_BASIC_INOUT;
return vmcs_config.basic & VMX_BASIC_NO_HW_ERROR_CODE_CC;
return vmcs_config.pin_based_exec_ctrl & PIN_BASED_VIRTUAL_NMIS &&
vmcs_config.cpu_based_exec_ctrl & CPU_BASED_NMI_WINDOW_EXITING;
return vmcs_config.pin_based_exec_ctrl &
return vmcs_config.pin_based_exec_ctrl & PIN_BASED_POSTED_INTR;
u64 vmx_basic = vmcs_config.nested.basic;
vmx_get_control_msr(&vmcs_config.nested, msr_index, &lowp, &highp);
u64 vmx_misc = vmx_control_msr(vmcs_config.nested.misc_low,
vmcs_config.nested.misc_high);
u64 vmx_ept_vpid_cap = vmx_control_msr(vmcs_config.nested.ept_caps,
vmcs_config.nested.vpid_caps);
const u64 *msr = vmx_get_fixed0_msr(&vmcs_config.nested, msr_index);
if (data & ~vmcs_config.nested.vmfunc_controls)
} else if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT) {
static void nested_vmx_setup_pinbased_ctls(struct vmcs_config *vmcs_conf,
static void nested_vmx_setup_exit_ctls(struct vmcs_config *vmcs_conf,
static void nested_vmx_setup_entry_ctls(struct vmcs_config *vmcs_conf,
static void nested_vmx_setup_cpubased_ctls(struct vmcs_config *vmcs_conf,
struct vmcs_config *vmcs_conf,
static void nested_vmx_setup_misc_data(struct vmcs_config *vmcs_conf,
void nested_vmx_setup_ctls_msrs(struct vmcs_config *vmcs_conf, u32 ept_caps)
nested_vmx_setup_ctls_msrs(&vmcs_config, vmx_capability.ept);
void nested_vmx_setup_ctls_msrs(struct vmcs_config *vmcs_conf, u32 ept_caps);
return vmx_get_vmx_msr(&vmcs_config.nested, msr, data);
if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT)
static int setup_vmcs_config(struct vmcs_config *vmcs_conf,
struct vmcs_config vmcs_conf;
if (memcmp(&vmcs_config, &vmcs_conf, sizeof(struct vmcs_config))) {
u32 *gold = (void *)&vmcs_config;
BUILD_BUG_ON(sizeof(struct vmcs_config) % sizeof(u32));
for (i = 0; i < sizeof(struct vmcs_config) / sizeof(u32); i++) {
memset(vmcs, 0, vmx_basic_vmcs_size(vmcs_config.basic));
vmcs->hdr.revision_id = vmx_basic_vmcs_revision_id(vmcs_config.basic);
vmcs->hdr.revision_id = vmx_basic_vmcs_revision_id(vmcs_config.basic);
if (vmcs_config.vmexit_ctrl & VM_EXIT_LOAD_IA32_PAT) {
u32 pin_based_exec_ctrl = vmcs_config.pin_based_exec_ctrl;
u32 vmentry_ctrl = vmcs_config.vmentry_ctrl;
u32 vmexit_ctrl = vmcs_config.vmexit_ctrl;
u32 exec_control = vmcs_config.cpu_based_exec_ctrl;
u64 exec_control = vmcs_config.cpu_based_3rd_exec_ctrl;
if (WARN_ON_ONCE(!(vmcs_config.nested.secondary_ctls_high & control)))
u32 exec_control = vmcs_config.cpu_based_2nd_exec_ctrl;
if (vmcs_config.vmentry_ctrl & VM_ENTRY_LOAD_IA32_PAT)
memcpy(&vmx->nested.msrs, &vmcs_config.nested, sizeof(vmx->nested.msrs));
struct vmcs_config vmcs_config __ro_after_init;
if (vmcs_config.cpu_based_2nd_exec_ctrl & SECONDARY_EXEC_EPT_VIOLATION_VE) {
vmx_misc_preemption_timer_rate(vmcs_config.misc);
if (setup_vmcs_config(&vmcs_config, &vmx_capability) < 0)
void evmcs_sanitize_exec_ctrls(struct vmcs_config *vmcs_conf)
void evmcs_sanitize_exec_ctrls(struct vmcs_config *vmcs_conf);