From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCH 03/11] KVM: nVMX: Detect shadow-vmcs capability Date: Mon, 8 Apr 2013 14:12:07 +0300 Message-ID: <20130408111207.GJ17919@redhat.com> References: <1362931402-abelg@il.ibm.com> <20130310160455.A4692380134@moren.haifa.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: kvm@vger.kernel.org, owasserm@redhat.com, nadav@harel.org.il, jun.nakajima@intel.com, dongxiao.xu@intel.com To: Abel Gordon Return-path: Received: from mx1.redhat.com ([209.132.183.28]:18047 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1761474Ab3DHLMX (ORCPT ); Mon, 8 Apr 2013 07:12:23 -0400 Content-Disposition: inline In-Reply-To: <20130310160455.A4692380134@moren.haifa.ibm.com> Sender: kvm-owner@vger.kernel.org List-ID: On Sun, Mar 10, 2013 at 06:04:55PM +0200, Abel Gordon wrote: > Add logic required to detect if shadow-vmcs is supported by the > processor. Introduce a new kernel module parameter to specify if L0 should use > shadow vmcs (or not) to run L1. > > Signed-off-by: Abel Gordon > --- > arch/x86/kvm/vmx.c | 25 ++++++++++++++++++++++++- > 1 file changed, 24 insertions(+), 1 deletion(-) > > --- .before/arch/x86/kvm/vmx.c 2013-03-10 18:00:54.000000000 +0200 > +++ .after/arch/x86/kvm/vmx.c 2013-03-10 18:00:54.000000000 +0200 > @@ -86,6 +86,8 @@ module_param(fasteoi, bool, S_IRUGO); > > static bool __read_mostly enable_apicv_reg_vid; > > +static bool __read_mostly enable_shadow_vmcs = 1; > +module_param_named(enable_shadow_vmcs, enable_shadow_vmcs, bool, S_IRUGO); > /* > * If nested=1, nested virtualization is supported, i.e., guests may use > * VMX and be a hypervisor for its own guests. If nested=0, guests may not > @@ -895,6 +897,18 @@ static inline bool cpu_has_vmx_wbinvd_ex > SECONDARY_EXEC_WBINVD_EXITING; > } > > +static inline bool cpu_has_vmx_shadow_vmcs(void) > +{ > + u64 vmx_msr; > + rdmsrl(MSR_IA32_VMX_MISC, vmx_msr); > + /* check if the cpu supports writing r/o exit information fields */ > + if (!(vmx_msr & (1u << 29))) Define please. > + return false; > + > + return vmcs_config.cpu_based_2nd_exec_ctrl & > + SECONDARY_EXEC_SHADOW_VMCS; > +} > + > static inline bool report_flexpriority(void) > { > return flexpriority_enabled; > @@ -2582,7 +2596,8 @@ static __init int setup_vmcs_config(stru > SECONDARY_EXEC_RDTSCP | > SECONDARY_EXEC_ENABLE_INVPCID | > SECONDARY_EXEC_APIC_REGISTER_VIRT | > - SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY; > + SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | > + SECONDARY_EXEC_SHADOW_VMCS; > if (adjust_vmx_controls(min2, opt2, > MSR_IA32_VMX_PROCBASED_CTLS2, > &_cpu_based_2nd_exec_control) < 0) > @@ -2771,6 +2786,8 @@ static __init int hardware_setup(void) > > if (!cpu_has_vmx_vpid()) > enable_vpid = 0; > + if (!cpu_has_vmx_shadow_vmcs()) > + enable_shadow_vmcs = 0; > > if (!cpu_has_vmx_ept() || > !cpu_has_vmx_ept_4levels()) { > @@ -3982,6 +3999,12 @@ static u32 vmx_secondary_exec_control(st > exec_control &= ~(SECONDARY_EXEC_APIC_REGISTER_VIRT | > SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY); > exec_control &= ~SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE; > + /* SECONDARY_EXEC_SHADOW_VMCS is enabled when L1 executes VMPTRLD > + (handle_vmptrld). > + We can NOT enable shadow_vmcs here because we don't have yet > + a current VMCS12 > + */ > + exec_control &= ~SECONDARY_EXEC_SHADOW_VMCS; > return exec_control; > } > > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Gleb.