From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gui Jianfeng Subject: [PATCH] KMV: VMX: consult IA32_VMX_EPT_VPID_CAP to determine EPT paging-structure memory type Date: Mon, 22 Mar 2010 17:06:42 +0800 Message-ID: <4BA73322.5020001@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: sheng@linux.intel.com, mtosatti@redhat.com, kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from cn.fujitsu.com ([222.73.24.84]:57178 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1753483Ab0CVJHF (ORCPT ); Mon, 22 Mar 2010 05:07:05 -0400 Sender: kvm-owner@vger.kernel.org List-ID: According to SDM, we need to configure EPT paging-structure memory type by consulting IA32_VMX_EPT_VPID_CAP. Signed-off-by: Gui Jianfeng --- arch/x86/include/asm/vmx.h | 2 ++ arch/x86/kvm/vmx.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h index fb9a080..1b33a60 100644 --- a/arch/x86/include/asm/vmx.h +++ b/arch/x86/include/asm/vmx.h @@ -374,6 +374,8 @@ enum vmcs_field { #define VMX_EPT_MT_EPTE_SHIFT 3 #define VMX_EPT_GAW_EPTP_SHIFT 3 #define VMX_EPT_DEFAULT_MT 0x6ull +#define VMX_EPT_MT_WRBACK 0x6ull +#define VMX_EPT_MT_UNCACHABLE 0x0ull #define VMX_EPT_READABLE_MASK 0x1ull #define VMX_EPT_WRITABLE_MASK 0x2ull #define VMX_EPT_EXECUTABLE_MASK 0x4ull diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 06108f3..f971b9b 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -1804,9 +1804,15 @@ static u64 construct_eptp(unsigned long root_hpa) { u64 eptp; - /* TODO write the value reading from MSR */ - eptp = VMX_EPT_DEFAULT_MT | - VMX_EPT_DEFAULT_GAW << VMX_EPT_GAW_EPTP_SHIFT; + if (cpu_has_vmx_eptp_writeback()) + eptp = VMX_EPT_MT_WRBACK | + VMX_EPT_DEFAULT_GAW << VMX_EPT_GAW_EPTP_SHIFT; + else if (cpu_has_vmx_eptp_uncacheable()) + eptp = VMX_EPT_MT_UNCACHABLE | + VMX_EPT_DEFAULT_GAW << VMX_EPT_GAW_EPTP_SHIFT; + else + BUG(); + eptp |= (root_hpa & PAGE_MASK); return eptp; -- 1.6.5.2