From: Xiaoyao Li <xiaoyao.li@linux.intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>,
Fenghua Yu <fenghua.yu@intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
H Peter Anvin <hpa@zytor.com>,
Dave Hansen <dave.hansen@intel.com>,
Ashok Raj <ashok.raj@intel.com>,
Peter Zijlstra <peterz@infradead.org>,
Ravi V Shankar <ravi.v.shankar@intel.com>
Cc: linux-kernel <linux-kernel@vger.kernel.org>, x86 <x86@kernel.org>,
kvm@vger.kernel.org
Subject: Re: [PATCH v4 16/17] kvm: x86: Add support IA32_CORE_CAPABILITY MSR
Date: Fri, 08 Mar 2019 14:10:30 +0800 [thread overview]
Message-ID: <3ced155309e5c3a01815ec39bb69016ca06316b6.camel@linux.intel.com> (raw)
In-Reply-To: <74630db9-2a83-cd72-73f6-8b9ef9b07313@redhat.com>
Hi, Paolo
On Mon, 2019-03-04 at 09:42 +0100, Paolo Bonzini wrote:
> On 02/03/19 03:45, Fenghua Yu wrote:
> > From: Xiaoyao Li <xiaoyao.li@linux.intel.com>
> >
> > MSR IA32_CORE_CAPABILITY is a feature-enumerating MSR, bit 5 of which
> > reports the capability of enabling detection of split locks (will be
> > supported on future processors based on Tremont microarchitecture and
> > later).
> >
> > Please check the latest Intel Architecture Instruction Set Extensions
> > and Future Features Programming Reference for more detailed information
> > on the MSR and the split lock bit.
> >
> > 1. Expose it to user space as a feature-enumerating MSR, so that user
> > space can query it.
> >
> > 2. Emualte MSR_IA32_CORE_CAPABILITY with vmx->core_capability. And add the
> > get and set handler of MSR_IA32_CORE_CAPABILITY.
> > For uesrspace, it can set this MSR when customizing features of guest,
> > also it can read the value of this MSR of guest.
> > For guest, as it's a feature-enumerating MSR, guest only can read it.
> >
> > Signed-off-by: Xiaoyao Li <xiaoyao.li@linux.intel.com>
> > Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
> > ---
> > arch/x86/include/asm/kvm_host.h | 1 +
> > arch/x86/kvm/vmx/vmx.c | 23 +++++++++++++++++++++++
> > arch/x86/kvm/vmx/vmx.h | 1 +
> > arch/x86/kvm/x86.c | 17 ++++++++++++++++-
> > 4 files changed, 41 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/x86/include/asm/kvm_host.h
> > b/arch/x86/include/asm/kvm_host.h
> > index 180373360e34..208f15570d17 100644
> > --- a/arch/x86/include/asm/kvm_host.h
> > +++ b/arch/x86/include/asm/kvm_host.h
> > @@ -1527,6 +1527,7 @@ int kvm_pv_send_ipi(struct kvm *kvm, unsigned long
> > ipi_bitmap_low,
> > unsigned long icr, int op_64_bit);
> >
> > u64 kvm_get_arch_capabilities(void);
> > +u64 kvm_get_core_capability(void);
> > void kvm_define_shared_msr(unsigned index, u32 msr);
> > int kvm_set_shared_msr(unsigned index, u64 val, u64 mask);
> >
> > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> > index 30a6bcd735ec..3e03c6e1e558 100644
> > --- a/arch/x86/kvm/vmx/vmx.c
> > +++ b/arch/x86/kvm/vmx/vmx.c
> > @@ -1679,6 +1679,12 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct
> > msr_data *msr_info)
> >
> > msr_info->data = to_vmx(vcpu)->spec_ctrl;
> > break;
> > + case MSR_IA32_CORE_CAPABILITY:
> > + if (!msr_info->host_initiated &&
> > + !guest_cpuid_has(vcpu, X86_FEATURE_CORE_CAPABILITY))
> > + return 1;
> > + msr_info->data = vmx->core_capability;
> > + break;
> > case MSR_IA32_ARCH_CAPABILITIES:
> > if (!msr_info->host_initiated &&
> > !guest_cpuid_has(vcpu, X86_FEATURE_ARCH_CAPABILITIES))
> > @@ -1891,6 +1897,21 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct
> > msr_data *msr_info)
> > vmx_disable_intercept_for_msr(vmx->vmcs01.msr_bitmap,
> > MSR_IA32_PRED_CMD,
> > MSR_TYPE_W);
> > break;
> > + case MSR_IA32_CORE_CAPABILITY:
> > + if (!msr_info->host_initiated)
> > + return 1;
> > + if (data & ~CORE_CAP_SPLIT_LOCK_DETECT)
> > + return 1;
> > +
> > + /*
> > + * Since AC split lock is a hardware feature, and there is no
> > + * software emulation yet, we cannot enable it for guest if
> > + * host hardware doesn't support it.
> > + */
> > + if (!boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT))
> > + data &= ~CORE_CAP_SPLIT_LOCK_DETECT;
> > + vmx->core_capability = data;
> > + break;
> > case MSR_IA32_ARCH_CAPABILITIES:
> > if (!msr_info->host_initiated)
> > return 1;
> > @@ -4083,6 +4104,8 @@ static void vmx_vcpu_setup(struct vcpu_vmx *vmx)
> > ++vmx->nmsrs;
> > }
> >
> > + vmx->core_capability = kvm_get_core_capability();
> > +
> > vmx->arch_capabilities = kvm_get_arch_capabilities();
> >
> > vm_exit_controls_init(vmx, vmx_vmexit_ctrl());
> > diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h
> > index 0ac0a64c7790..cc22379991f3 100644
> > --- a/arch/x86/kvm/vmx/vmx.h
> > +++ b/arch/x86/kvm/vmx/vmx.h
> > @@ -191,6 +191,7 @@ struct vcpu_vmx {
> > u64 msr_guest_kernel_gs_base;
> > #endif
> >
> > + u64 core_capability;
> > u64 arch_capabilities;
> > u64 spec_ctrl;
> >
> > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> > index 941f932373d0..c3c9e3f2d08a 100644
> > --- a/arch/x86/kvm/x86.c
> > +++ b/arch/x86/kvm/x86.c
> > @@ -1125,7 +1125,8 @@ static u32 msrs_to_save[] = {
> > #endif
> > MSR_IA32_TSC, MSR_IA32_CR_PAT, MSR_VM_HSAVE_PA,
> > MSR_IA32_FEATURE_CONTROL, MSR_IA32_BNDCFGS, MSR_TSC_AUX,
> > - MSR_IA32_SPEC_CTRL, MSR_IA32_ARCH_CAPABILITIES,
> > + MSR_IA32_SPEC_CTRL, MSR_IA32_CORE_CAPABILITY,
> > + MSR_IA32_ARCH_CAPABILITIES,
> > MSR_IA32_RTIT_CTL, MSR_IA32_RTIT_STATUS, MSR_IA32_RTIT_CR3_MATCH,
> > MSR_IA32_RTIT_OUTPUT_BASE, MSR_IA32_RTIT_OUTPUT_MASK,
> > MSR_IA32_RTIT_ADDR0_A, MSR_IA32_RTIT_ADDR0_B,
> > @@ -1197,11 +1198,22 @@ static u32 msr_based_features[] = {
> >
> > MSR_F10H_DECFG,
> > MSR_IA32_UCODE_REV,
> > + MSR_IA32_CORE_CAPABILITY,
> > MSR_IA32_ARCH_CAPABILITIES,
> > };
> >
> > static unsigned int num_msr_based_features;
> >
> > +u64 kvm_get_core_capability(void)
> > +{
> > + u64 data;
> > +
> > + rdmsrl_safe(MSR_IA32_CORE_CAPABILITY, &data);
>
> This patch should be merged with the previous patch. Also here you
> should add:
>
> data &= CORE_CAP_SPLIT_LOCK_DETECT;
I agree with this.
> so that non-virtualizable features are hidden and
>
> if (boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT))
> data |= CORE_CAP_SPLIT_LOCK_DETECT;
>
> so that userspace gets "for free" the FMS list that will be added
> later to the kernel.
I think it's redundant. Because there is no case that
rdmsrl_safe(MSR_IA32_CORE_CAPABILITY, &data) shows no split lock detection while
boot_cpu_has(X86_FEATURE_SPLIT_LOCK_DETECT).
Xiaoyao
> Thanks,
>
> Paolo
>
> > +
> > + return data;
> > +}
> > +EXPORT_SYMBOL_GPL(kvm_get_core_capability);
> > +
> > u64 kvm_get_arch_capabilities(void)
> > {
> > u64 data;
> > @@ -1227,6 +1239,9 @@ EXPORT_SYMBOL_GPL(kvm_get_arch_capabilities);
> > static int kvm_get_msr_feature(struct kvm_msr_entry *msr)
> > {
> > switch (msr->index) {
> > + case MSR_IA32_CORE_CAPABILITY:
> > + msr->data = kvm_get_core_capability();
> > + break;
> > case MSR_IA32_ARCH_CAPABILITIES:
> > msr->data = kvm_get_arch_capabilities();
> > break;
> >
>
>
next prev parent reply other threads:[~2019-03-08 6:10 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-02 2:44 [PATCH v4 00/17] x86/split_lock: Enable #AC exception for split locked accesses Fenghua Yu
2019-03-02 2:44 ` [PATCH v4 01/17] x86/common: Align cpu_caps_cleared and cpu_caps_set to unsigned long Fenghua Yu
2019-03-04 8:33 ` Paolo Bonzini
2019-03-04 10:17 ` Peter Zijlstra
2019-03-04 10:48 ` Paolo Bonzini
2019-03-04 12:44 ` Peter Zijlstra
2019-03-04 13:13 ` Paolo Bonzini
2019-03-02 2:44 ` [PATCH v4 02/17] drivers/net/b44: Align pwol_mask to unsigned long for better performance Fenghua Yu
2019-03-04 10:00 ` Peter Zijlstra
2019-03-04 14:45 ` Fenghua Yu
2019-03-04 15:27 ` Peter Zijlstra
2019-03-02 2:44 ` [PATCH v4 03/17] wlcore: Align reg_ch_conf_pending and tmp_ch_bitmap " Fenghua Yu
2019-03-04 10:11 ` Peter Zijlstra
2019-03-04 10:46 ` Paolo Bonzini
2019-03-04 12:41 ` Peter Zijlstra
2019-03-04 13:09 ` Paolo Bonzini
2019-03-04 13:30 ` Peter Zijlstra
2019-03-04 14:40 ` Fenghua Yu
2019-03-04 15:54 ` Paolo Bonzini
2019-03-02 2:44 ` [PATCH v4 04/17] x86/split_lock: Align x86_capability to unsigned long to avoid split locked access Fenghua Yu
2019-03-04 18:52 ` Dave Hansen
2019-03-04 19:15 ` Fenghua Yu
2019-03-04 19:29 ` Dave Hansen
2019-03-04 20:08 ` Peter Zijlstra
2019-03-04 20:12 ` Peter Zijlstra
2019-03-02 2:44 ` [PATCH v4 05/17] x86/cpufeatures: Enumerate IA32_CORE_CAPABILITIES MSR Fenghua Yu
2019-03-04 18:53 ` Dave Hansen
2019-03-04 18:55 ` Yu, Fenghua
2019-03-04 19:01 ` Dave Hansen
2019-03-02 2:45 ` [PATCH v4 06/17] x86/msr-index: Define IA32_CORE_CAPABILITY MSR and #AC exception for split lock bit Fenghua Yu
2019-03-02 2:45 ` [PATCH v4 07/17] x86/split_lock: Enumerate #AC for split lock by MSR IA32_CORE_CAPABILITY Fenghua Yu
2019-03-04 18:58 ` Dave Hansen
2019-03-04 18:59 ` Fenghua Yu
2019-03-04 19:19 ` Dave Hansen
2019-03-02 2:45 ` [PATCH v4 08/17] x86/clearcpuid: Support multiple clearcpuid options Fenghua Yu
2019-03-02 2:45 ` [PATCH v4 09/17] x86/clearcpuid: Support feature flag string in kernel option clearcpuid Fenghua Yu
2019-03-02 2:45 ` [PATCH v4 10/17] x86/clearcpuid: Apply cleared feature bits that are forced set before Fenghua Yu
2019-03-02 2:45 ` [PATCH v4 11/17] x86/clearcpuid: Clear CPUID bit in CPUID faulting Fenghua Yu
2019-03-04 22:04 ` kbuild test robot
2019-03-05 7:27 ` kbuild test robot
2019-03-02 2:45 ` [PATCH v4 12/17] Change document for kernel option clearcpuid Fenghua Yu
2019-03-02 2:45 ` [PATCH v4 13/17] x86/split_lock: Handle #AC exception for split lock Fenghua Yu
2019-03-02 2:45 ` [PATCH v4 14/17] x86/split_lock: Add a sysfs interface to allow user to enable or disable split lock detection on all CPUs during run time Fenghua Yu
2019-03-02 2:45 ` [PATCH v4 15/17] kvm: x86: Report CORE_CAPABILITY on GET_SUPPORTED_CPUID Fenghua Yu
2019-03-04 8:38 ` Paolo Bonzini
2019-03-04 10:47 ` Xiaoyao Li
2019-03-04 10:49 ` Paolo Bonzini
2019-03-04 11:10 ` Xiaoyao Li
2019-03-04 11:14 ` Paolo Bonzini
2019-03-04 11:21 ` Xiaoyao Li
2019-03-05 7:03 ` Xiaoyao Li
2019-03-02 2:45 ` [PATCH v4 16/17] kvm: x86: Add support IA32_CORE_CAPABILITY MSR Fenghua Yu
2019-03-04 8:42 ` Paolo Bonzini
2019-03-04 12:32 ` Xiaoyao Li
2019-03-08 6:10 ` Xiaoyao Li [this message]
2019-03-08 7:54 ` Paolo Bonzini
2019-03-08 8:03 ` Xiaoyao Li
2019-03-02 2:45 ` [PATCH v4 17/17] kvm: vmx: Emulate TEST_CTL MSR Fenghua Yu
2019-03-09 2:31 ` Xiaoyao Li
2019-03-11 13:31 ` Paolo Bonzini
2019-03-11 15:10 ` Xiaoyao Li
2019-03-11 15:21 ` Paolo Bonzini
2019-03-11 16:58 ` Xiaoyao Li
2019-03-04 21:55 ` [PATCH v4 00/17] x86/split_lock: Enable #AC exception for split locked accesses Konrad Rzeszutek Wilk
2019-03-05 0:06 ` Fenghua Yu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3ced155309e5c3a01815ec39bb69016ca06316b6.camel@linux.intel.com \
--to=xiaoyao.li@linux.intel.com \
--cc=ashok.raj@intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@intel.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=ravi.v.shankar@intel.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.