Message ID | 20200828085622.8365-2-chenyi.qiang@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix nested VMX controls MSRs | expand |
On Fri, Aug 28, 2020 at 1:54 AM Chenyi Qiang <chenyi.qiang@intel.com> wrote: > > KVM supports the nested VM_{EXIT, ENTRY}_LOAD_IA32_PERF_GLOBAL_CTRL and > VM_{ENTRY_LOAD, EXIT_CLEAR}_BNDCFGS, but they doesn't expose during > the setup of nested VMX controls MSR. > Aren't these features added conditionally in nested_vmx_entry_exit_ctls_update() and nested_vmx_pmu_entry_exit_ctls_update()?
On 8/29/2020 1:43 AM, Jim Mattson wrote: > On Fri, Aug 28, 2020 at 1:54 AM Chenyi Qiang <chenyi.qiang@intel.com> wrote: >> >> KVM supports the nested VM_{EXIT, ENTRY}_LOAD_IA32_PERF_GLOBAL_CTRL and >> VM_{ENTRY_LOAD, EXIT_CLEAR}_BNDCFGS, but they doesn't expose during >> the setup of nested VMX controls MSR. >> > > Aren't these features added conditionally in > nested_vmx_entry_exit_ctls_update() and > nested_vmx_pmu_entry_exit_ctls_update()? > Yes, but I assume vmcs_config.nested should reflect the global capability of VMX MSR. KVM supports these two controls, so should be exposed here.
On 8/29/2020 9:49 AM, Chenyi Qiang wrote: > > > On 8/29/2020 1:43 AM, Jim Mattson wrote: >> On Fri, Aug 28, 2020 at 1:54 AM Chenyi Qiang <chenyi.qiang@intel.com> >> wrote: >>> >>> KVM supports the nested VM_{EXIT, ENTRY}_LOAD_IA32_PERF_GLOBAL_CTRL and >>> VM_{ENTRY_LOAD, EXIT_CLEAR}_BNDCFGS, but they doesn't expose during >>> the setup of nested VMX controls MSR. >>> >> >> Aren't these features added conditionally in >> nested_vmx_entry_exit_ctls_update() and >> nested_vmx_pmu_entry_exit_ctls_update()? >> > > Yes, but I assume vmcs_config.nested should reflect the global > capability of VMX MSR. KVM supports these two controls, so should be > exposed here. No. I prefer to say they are removed conditionally in nested_vmx_entry_exit_ctls_update() and nested_vmx_pmu_entry_exit_ctls_update(). Userspace calls vmx_get_msr_feature() to query what KVM supports for these VMX MSR. In vmx_get_msr_feature(), it returns the value of vmcs_config.nested. As KVM supports these two bits, we should advertise them in vmcs_config.nested and report to userspace.
On Fri, Aug 28, 2020 at 7:51 PM Xiaoyao Li <xiaoyao.li@intel.com> wrote: > > On 8/29/2020 9:49 AM, Chenyi Qiang wrote: > > > > > > On 8/29/2020 1:43 AM, Jim Mattson wrote: > >> On Fri, Aug 28, 2020 at 1:54 AM Chenyi Qiang <chenyi.qiang@intel.com> > >> wrote: > >>> > >>> KVM supports the nested VM_{EXIT, ENTRY}_LOAD_IA32_PERF_GLOBAL_CTRL and > >>> VM_{ENTRY_LOAD, EXIT_CLEAR}_BNDCFGS, but they doesn't expose during > >>> the setup of nested VMX controls MSR. > >>> > >> > >> Aren't these features added conditionally in > >> nested_vmx_entry_exit_ctls_update() and > >> nested_vmx_pmu_entry_exit_ctls_update()? > >> > > > > Yes, but I assume vmcs_config.nested should reflect the global > > capability of VMX MSR. KVM supports these two controls, so should be > > exposed here. > > No. I prefer to say they are removed conditionally in > nested_vmx_entry_exit_ctls_update() and > nested_vmx_pmu_entry_exit_ctls_update(). > > Userspace calls vmx_get_msr_feature() to query what KVM supports for > these VMX MSR. In vmx_get_msr_feature(), it returns the value of > vmcs_config.nested. As KVM supports these two bits, we should advertise > them in vmcs_config.nested and report to userspace. It would be nice if there was an API to query what MSR values KVM supports for a specific VCPU configuration, but given that this is a system ioctl, I agree with you.
On 8/28/2020 4:56 PM, Chenyi Qiang wrote: > KVM supports the nested VM_{EXIT, ENTRY}_LOAD_IA32_PERF_GLOBAL_CTRL and > VM_{ENTRY_LOAD, EXIT_CLEAR}_BNDCFGS, but they doesn't expose during > the setup of nested VMX controls MSR. > > Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com> Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com> > --- > arch/x86/kvm/vmx/nested.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index 23b58c28a1c9..6e0e71f4d45f 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -6310,7 +6310,8 @@ void nested_vmx_setup_ctls_msrs(struct nested_vmx_msrs *msrs, u32 ept_caps) > #ifdef CONFIG_X86_64 > VM_EXIT_HOST_ADDR_SPACE_SIZE | > #endif > - VM_EXIT_LOAD_IA32_PAT | VM_EXIT_SAVE_IA32_PAT; > + VM_EXIT_LOAD_IA32_PAT | VM_EXIT_SAVE_IA32_PAT | > + VM_EXIT_CLEAR_BNDCFGS | VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL; > msrs->exit_ctls_high |= > VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR | > VM_EXIT_LOAD_IA32_EFER | VM_EXIT_SAVE_IA32_EFER | > @@ -6329,7 +6330,8 @@ void nested_vmx_setup_ctls_msrs(struct nested_vmx_msrs *msrs, u32 ept_caps) > #ifdef CONFIG_X86_64 > VM_ENTRY_IA32E_MODE | > #endif > - VM_ENTRY_LOAD_IA32_PAT; > + VM_ENTRY_LOAD_IA32_PAT | VM_ENTRY_LOAD_BNDCFGS | > + VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL; > msrs->entry_ctls_high |= > (VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR | VM_ENTRY_LOAD_IA32_EFER); > >
diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index 23b58c28a1c9..6e0e71f4d45f 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -6310,7 +6310,8 @@ void nested_vmx_setup_ctls_msrs(struct nested_vmx_msrs *msrs, u32 ept_caps) #ifdef CONFIG_X86_64 VM_EXIT_HOST_ADDR_SPACE_SIZE | #endif - VM_EXIT_LOAD_IA32_PAT | VM_EXIT_SAVE_IA32_PAT; + VM_EXIT_LOAD_IA32_PAT | VM_EXIT_SAVE_IA32_PAT | + VM_EXIT_CLEAR_BNDCFGS | VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL; msrs->exit_ctls_high |= VM_EXIT_ALWAYSON_WITHOUT_TRUE_MSR | VM_EXIT_LOAD_IA32_EFER | VM_EXIT_SAVE_IA32_EFER | @@ -6329,7 +6330,8 @@ void nested_vmx_setup_ctls_msrs(struct nested_vmx_msrs *msrs, u32 ept_caps) #ifdef CONFIG_X86_64 VM_ENTRY_IA32E_MODE | #endif - VM_ENTRY_LOAD_IA32_PAT; + VM_ENTRY_LOAD_IA32_PAT | VM_ENTRY_LOAD_BNDCFGS | + VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL; msrs->entry_ctls_high |= (VM_ENTRY_ALWAYSON_WITHOUT_TRUE_MSR | VM_ENTRY_LOAD_IA32_EFER);
KVM supports the nested VM_{EXIT, ENTRY}_LOAD_IA32_PERF_GLOBAL_CTRL and VM_{ENTRY_LOAD, EXIT_CLEAR}_BNDCFGS, but they doesn't expose during the setup of nested VMX controls MSR. Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com> --- arch/x86/kvm/vmx/nested.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)