Even cpu_has_vmx_vpid, which checks vmcs_config, doesn't necessarily reflect the active VMCS controls. When the module parameter, enable_vpid, is cleared, the corresponding VMCS execution control is cleared, but vmcs_config is not modified. In fact, it doesn't look like any of the VMCS control changes made in vmx_compute_secondary_exec_control() are reflected in vmcs_config.cpu_based_2nd_exec_ctrl, so I think I was correct in enumerating the following: cpu_has_vmx_virtualize_apic_accesses cpu_has_vmx_virtualize_x2apic_mode cpu_has_vmx_apic_register_virt cpu_has_vmx_virtual_intr_delivery cpu_has_vmx_ept cpu_has_vmx_unrestricted_guest cpu_has_vmx_ple cpu_has_vmx_vpid cpu_has_vmx_rdtscp cpu_has_vmx_invpcid cpu_has_vmx_pml These are all tests of physical CPU capabilities--not of active VMCS controls.