KVM: nVMX: Simplify the setting of SECONDARY_EXEC_ENABLE_VMFUNC for nested.
authorYu Zhang <yu.c.zhang@linux.intel.com>
Wed, 9 Nov 2022 07:54:13 +0000 (15:54 +0800)
committerSean Christopherson <seanjc@google.com>
Tue, 7 Feb 2023 01:51:19 +0000 (01:51 +0000)
Values of base settings for nested proc-based VM-Execution control MSR come
from the ones for non-nested. And for SECONDARY_EXEC_ENABLE_VMFUNC flag,
KVM currently a) first mask off it from vmcs_conf->cpu_based_2nd_exec_ctrl;
b) then check it against the same source; c) and reset it again if host has
it.

So just simplify this, by not masking off SECONDARY_EXEC_ENABLE_VMFUNC in
the first place.

No functional change.

Signed-off-by: Yu Zhang <yu.c.zhang@linux.intel.com>
Link: https://lore.kernel.org/r/20221109075413.1405803-3-yu.c.zhang@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/vmx/nested.c

index 3c226de..7c4f5ca 100644 (file)
@@ -6880,6 +6880,7 @@ void nested_vmx_setup_ctls_msrs(struct vmcs_config *vmcs_conf, u32 ept_caps)
                SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY |
                SECONDARY_EXEC_RDRAND_EXITING |
                SECONDARY_EXEC_ENABLE_INVPCID |
+               SECONDARY_EXEC_ENABLE_VMFUNC |
                SECONDARY_EXEC_RDSEED_EXITING |
                SECONDARY_EXEC_XSAVES |
                SECONDARY_EXEC_TSC_SCALING |
@@ -6912,18 +6913,13 @@ void nested_vmx_setup_ctls_msrs(struct vmcs_config *vmcs_conf, u32 ept_caps)
                                SECONDARY_EXEC_ENABLE_PML;
                        msrs->ept_caps |= VMX_EPT_AD_BIT;
                }
-       }
 
-       if (cpu_has_vmx_vmfunc()) {
-               msrs->secondary_ctls_high |=
-                       SECONDARY_EXEC_ENABLE_VMFUNC;
                /*
-                * Advertise EPTP switching unconditionally
-                * since we emulate it
+                * Advertise EPTP switching irrespective of hardware support,
+                * KVM emulates it in software so long as VMFUNC is supported.
                 */
-               if (enable_ept)
-                       msrs->vmfunc_controls =
-                               VMX_VMFUNC_EPTP_SWITCHING;
+               if (cpu_has_vmx_vmfunc())
+                       msrs->vmfunc_controls = VMX_VMFUNC_EPTP_SWITCHING;
        }
 
        /*