Message ID | 20220629150625.238286-21-vkuznets@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: VMX: Support TscScaling and EnclsExitingBitmap with eVMCS + use vmcs_config for L1 VMX MSRs | expand |
On Wed, Jun 29, 2022 at 8:07 AM Vitaly Kuznetsov <vkuznets@redhat.com> wrote: > > As a preparation to reusing the result of setup_vmcs_config() in > nested VMX MSR setup, add the VMENTRY controls which KVM doesn't > use but supports for nVMX to KVM_OPT_VMX_VM_ENTRY_CONTROLS and > filter them out in vmx_vmentry_ctrl(). > > No functional change intended. > > Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> > --- > arch/x86/kvm/vmx/vmx.c | 3 +++ > arch/x86/kvm/vmx/vmx.h | 4 +++- > 2 files changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > index e5ab77ed37e4..b774b6391e0e 100644 > --- a/arch/x86/kvm/vmx/vmx.c > +++ b/arch/x86/kvm/vmx/vmx.c > @@ -4179,6 +4179,9 @@ static u32 vmx_vmentry_ctrl(void) > { > u32 vmentry_ctrl = vmcs_config.vmentry_ctrl; > > + /* Not used by KVM but supported for nesting. */ > + vmentry_ctrl &= ~(VM_ENTRY_SMM | VM_ENTRY_DEACT_DUAL_MONITOR); > + LOL! KVM does not emulate the dual-monitor treatment of SMIs and SMM. Do we actually claim to support these VM-entry controls today?!? > if (vmx_pt_mode_is_system()) > vmentry_ctrl &= ~(VM_ENTRY_PT_CONCEAL_PIP | > VM_ENTRY_LOAD_IA32_RTIT_CTL); > diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h > index d4503a38735b..7ada8410a037 100644 > --- a/arch/x86/kvm/vmx/vmx.h > +++ b/arch/x86/kvm/vmx/vmx.h > @@ -479,7 +479,9 @@ static inline u8 vmx_get_rvi(void) > __KVM_REQ_VMX_VM_ENTRY_CONTROLS > #endif > #define KVM_OPT_VMX_VM_ENTRY_CONTROLS \ > - (VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | \ > + (VM_ENTRY_SMM | \ > + VM_ENTRY_DEACT_DUAL_MONITOR | \ > + VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | \ > VM_ENTRY_LOAD_IA32_PAT | \ > VM_ENTRY_LOAD_IA32_EFER | \ > VM_ENTRY_LOAD_BNDCFGS | \ > -- > 2.35.3 >
Jim Mattson <jmattson@google.com> writes: > On Wed, Jun 29, 2022 at 8:07 AM Vitaly Kuznetsov <vkuznets@redhat.com> wrote: >> >> As a preparation to reusing the result of setup_vmcs_config() in >> nested VMX MSR setup, add the VMENTRY controls which KVM doesn't >> use but supports for nVMX to KVM_OPT_VMX_VM_ENTRY_CONTROLS and >> filter them out in vmx_vmentry_ctrl(). >> >> No functional change intended. >> >> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> >> --- >> arch/x86/kvm/vmx/vmx.c | 3 +++ >> arch/x86/kvm/vmx/vmx.h | 4 +++- >> 2 files changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c >> index e5ab77ed37e4..b774b6391e0e 100644 >> --- a/arch/x86/kvm/vmx/vmx.c >> +++ b/arch/x86/kvm/vmx/vmx.c >> @@ -4179,6 +4179,9 @@ static u32 vmx_vmentry_ctrl(void) >> { >> u32 vmentry_ctrl = vmcs_config.vmentry_ctrl; >> >> + /* Not used by KVM but supported for nesting. */ >> + vmentry_ctrl &= ~(VM_ENTRY_SMM | VM_ENTRY_DEACT_DUAL_MONITOR); >> + > > LOL! KVM does not emulate the dual-monitor treatment of SMIs and SMM. > Do we actually claim to support these VM-entry controls today?!? > No, just a brainfart on my side, nested_vmx_setup_ctls_msrs() filters them out too. I'll drop the patch. >> if (vmx_pt_mode_is_system()) >> vmentry_ctrl &= ~(VM_ENTRY_PT_CONCEAL_PIP | >> VM_ENTRY_LOAD_IA32_RTIT_CTL); >> diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h >> index d4503a38735b..7ada8410a037 100644 >> --- a/arch/x86/kvm/vmx/vmx.h >> +++ b/arch/x86/kvm/vmx/vmx.h >> @@ -479,7 +479,9 @@ static inline u8 vmx_get_rvi(void) >> __KVM_REQ_VMX_VM_ENTRY_CONTROLS >> #endif >> #define KVM_OPT_VMX_VM_ENTRY_CONTROLS \ >> - (VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | \ >> + (VM_ENTRY_SMM | \ >> + VM_ENTRY_DEACT_DUAL_MONITOR | \ >> + VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | \ >> VM_ENTRY_LOAD_IA32_PAT | \ >> VM_ENTRY_LOAD_IA32_EFER | \ >> VM_ENTRY_LOAD_BNDCFGS | \ >> -- >> 2.35.3 >> >
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index e5ab77ed37e4..b774b6391e0e 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -4179,6 +4179,9 @@ static u32 vmx_vmentry_ctrl(void) { u32 vmentry_ctrl = vmcs_config.vmentry_ctrl; + /* Not used by KVM but supported for nesting. */ + vmentry_ctrl &= ~(VM_ENTRY_SMM | VM_ENTRY_DEACT_DUAL_MONITOR); + if (vmx_pt_mode_is_system()) vmentry_ctrl &= ~(VM_ENTRY_PT_CONCEAL_PIP | VM_ENTRY_LOAD_IA32_RTIT_CTL); diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h index d4503a38735b..7ada8410a037 100644 --- a/arch/x86/kvm/vmx/vmx.h +++ b/arch/x86/kvm/vmx/vmx.h @@ -479,7 +479,9 @@ static inline u8 vmx_get_rvi(void) __KVM_REQ_VMX_VM_ENTRY_CONTROLS #endif #define KVM_OPT_VMX_VM_ENTRY_CONTROLS \ - (VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | \ + (VM_ENTRY_SMM | \ + VM_ENTRY_DEACT_DUAL_MONITOR | \ + VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL | \ VM_ENTRY_LOAD_IA32_PAT | \ VM_ENTRY_LOAD_IA32_EFER | \ VM_ENTRY_LOAD_BNDCFGS | \
As a preparation to reusing the result of setup_vmcs_config() in nested VMX MSR setup, add the VMENTRY controls which KVM doesn't use but supports for nVMX to KVM_OPT_VMX_VM_ENTRY_CONTROLS and filter them out in vmx_vmentry_ctrl(). No functional change intended. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> --- arch/x86/kvm/vmx/vmx.c | 3 +++ arch/x86/kvm/vmx/vmx.h | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-)