All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Yang Weijiang <weijiang.yang@intel.com>
Cc: pbonzini@redhat.com, rkrcmar@redhat.com, jmattson@google.com,
	linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
	mst@redhat.com, yu-cheng.yu@intel.com, yi.z.zhang@intel.com,
	hjl.tools@gmail.com, Zhang Yi Z <yi.z.zhang@linux.intel.com>
Subject: Re: [PATCH v2 5/7] KVM:VMX: Pass through host CET related MSRs to Guest.
Date: Fri, 25 Jan 2019 14:50:12 -0800	[thread overview]
Message-ID: <20190125225012.GE21849@linux.intel.com> (raw)
In-Reply-To: <20190122205909.24165-6-weijiang.yang@intel.com>

On Wed, Jan 23, 2019 at 04:59:07AM +0800, Yang Weijiang wrote:
> The CET runtime settings, i.e., CET state control bits(IA32_U_CET/
> IA32_S_CET), CET SSP(IA32_PL3_SSP/IA32_PL0_SSP) and SSP table address
> (IA32_INTERRUPT_SSP_TABLE_ADDR) are task/thread specific, therefore,
> OS needs to save/restore the states properly during context switch,
> e.g., task/thread switching, interrupt/exception handling, it uses
> xsaves/xrstors to achieve that.
> 
> The difference between VMCS CET area fields and xsave CET area, is that
> the former is for state retention during Guest/Host context
> switch while the latter is for state retention during OS execution.
> 
> Linux currently doesn't support CPL1 and CPL2, so SSPs for these level
> are skipped here.
> 
> Signed-off-by: Zhang Yi Z <yi.z.zhang@linux.intel.com>
> Signed-off-by: Yang Weijiang <weijiang.yang@intel.com>
> ---
>  arch/x86/kvm/vmx.c | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
> 
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 7bbb8b26e901..68c0e5e41cb1 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -11531,6 +11531,7 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id)
>  	vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_SYSENTER_CS, MSR_TYPE_RW);
>  	vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_SYSENTER_ESP, MSR_TYPE_RW);
>  	vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_SYSENTER_EIP, MSR_TYPE_RW);
> +

Spurious whitespace change.

>  	vmx->msr_bitmap_mode = 0;
>  
>  	vmx->loaded_vmcs = &vmx->vmcs01;
> @@ -11769,6 +11770,8 @@ static void nested_vmx_entry_exit_ctls_update(struct kvm_vcpu *vcpu)
>  static void vmx_cpuid_update(struct kvm_vcpu *vcpu)
>  {
>  	struct vcpu_vmx *vmx = to_vmx(vcpu);
> +	struct kvm_cpuid_entry2 *best;
> +	unsigned long *msr_bitmap;
>  
>  	if (cpu_has_secondary_exec_ctrls()) {
>  		vmx_compute_secondary_exec_control(vmx);
> @@ -11786,6 +11789,19 @@ static void vmx_cpuid_update(struct kvm_vcpu *vcpu)
>  		nested_vmx_cr_fixed1_bits_update(vcpu);
>  		nested_vmx_entry_exit_ctls_update(vcpu);
>  	}
> +
> +	msr_bitmap = vmx->vmcs01.msr_bitmap;
> +	best = kvm_find_cpuid_entry(vcpu, 7, 0);
> +	if ((best && best->function == 0x7) &&
> +	    ((best->ecx & bit(X86_FEATURE_SHSTK)) |
> +	    (best->edx & bit(X86_FEATURE_IBT)))) {
> +		vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_U_CET, MSR_TYPE_RW);
> +		vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_S_CET, MSR_TYPE_RW);
> +		vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_INT_SSP_TAB, MSR_TYPE_RW);
> +		vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_PL0_SSP, MSR_TYPE_RW);
> +		vmx_disable_intercept_for_msr(msr_bitmap, MSR_IA32_PL3_SSP, MSR_TYPE_RW);

kvm_cpuid_update() an be called multiple times, don't we need to look
for a change in status as opposed to the bits being enabled?  And at
that point toggling interception should probably be wrapped in a helper
function.

> +	}
> +
>  }
>  
>  static void vmx_set_supported_cpuid(u32 func, struct kvm_cpuid_entry2 *entry)
> -- 
> 2.17.1
> 

  reply	other threads:[~2019-01-25 22:50 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-22 20:59 [PATCH v2 0/7] This patch-set is to enable Guest CET support Yang Weijiang
2019-01-22 20:59 ` [PATCH v2 1/7] KVM:VMX: Define CET VMCS fields and bits Yang Weijiang
2019-01-25 18:02   ` Paolo Bonzini
2019-01-28 10:33     ` Yang Weijiang
2019-01-29 15:19       ` Paolo Bonzini
2019-01-29  8:29         ` Yang Weijiang
2019-01-30  8:32           ` Paolo Bonzini
2019-03-04 18:56         ` Sean Christopherson
2019-03-08  9:15           ` Paolo Bonzini
2019-03-08 15:50             ` Sean Christopherson
2019-03-08 16:34               ` Paolo Bonzini
2019-01-25 22:30   ` Sean Christopherson
2019-01-29 17:47   ` Jim Mattson
2019-01-29 18:01     ` Jim Mattson
     [not found]       ` <20190129182750.GB8156@linux.intel.com>
2019-01-29  8:34         ` Yang Weijiang
2019-01-22 20:59 ` [PATCH v2 2/7] KVM:CPUID: Define CET CPUID bits and CR4.CET master enable bit Yang Weijiang
2019-01-22 20:59 ` [PATCH v2 3/7] KVM:CPUID: Add CPUID support for CET xsaves component query Yang Weijiang
2019-01-25 17:57   ` Paolo Bonzini
2019-01-25 22:40   ` Sean Christopherson
2019-01-22 20:59 ` [PATCH v2 4/7] KVM:CPUID: Fix xsaves area size calculation for CPUID.(EAX=0xD,ECX=1) Yang Weijiang
2019-01-25 22:47   ` Sean Christopherson
2019-01-22 20:59 ` [PATCH v2 5/7] KVM:VMX: Pass through host CET related MSRs to Guest Yang Weijiang
2019-01-25 22:50   ` Sean Christopherson [this message]
2019-01-22 20:59 ` [PATCH v2 6/7] KVM:VMX: Load Guest CET via VMCS when CET is enabled in Guest Yang Weijiang
2019-01-25 22:56   ` Sean Christopherson
2019-01-30 15:16     ` Yang Weijiang
2019-01-22 20:59 ` [PATCH v2 7/7] KVM:X86: Enable MSR_IA32_XSS bit 11 and 12 for CET xsaves/xrstors Yang Weijiang
2019-01-25 23:03   ` Sean Christopherson

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=20190125225012.GE21849@linux.intel.com \
    --to=sean.j.christopherson@intel.com \
    --cc=hjl.tools@gmail.com \
    --cc=jmattson@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --cc=weijiang.yang@intel.com \
    --cc=yi.z.zhang@intel.com \
    --cc=yi.z.zhang@linux.intel.com \
    --cc=yu-cheng.yu@intel.com \
    /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.