On Monday 22 March 2010 17:06:42 Gui Jianfeng wrote: > According to SDM, we need to configure EPT paging-structure memory type > by consulting IA32_VMX_EPT_VPID_CAP. > > Signed-off-by: Gui Jianfeng <guijianfeng@xxxxxxxxxxxxxx> > --- > 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; I prefer to ensure WB is supported and used as default. Otherwise it would be a big trouble for memory subsystem(to use UC for all memory). Both WB and UC EPT memory types are ensured to be support in hardware. And you can remove VMX_EPT_DEFAULT_MT as well. -- regards Yang, Sheng > + 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; > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html