From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: [PATCH 4/4] KVM: VMX: Enable EPT 1GB page support Date: Wed, 6 Jan 2010 07:19:15 -0200 Message-ID: <20100106091915.GA4553@amt.cnet> References: <1262689349-12350-1-git-send-email-sheng@linux.intel.com> <1262689349-12350-5-git-send-email-sheng@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Avi Kivity , kvm@vger.kernel.org To: Sheng Yang Return-path: Received: from mx1.redhat.com ([209.132.183.28]:52764 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751307Ab0AFJUV (ORCPT ); Wed, 6 Jan 2010 04:20:21 -0500 Content-Disposition: inline In-Reply-To: <1262689349-12350-5-git-send-email-sheng@linux.intel.com> Sender: kvm-owner@vger.kernel.org List-ID: On Tue, Jan 05, 2010 at 07:02:29PM +0800, Sheng Yang wrote: > > Signed-off-by: Sheng Yang > --- > arch/x86/include/asm/vmx.h | 1 + > arch/x86/kvm/mmu.c | 8 +++++--- > arch/x86/kvm/vmx.c | 11 ++++++++++- > 3 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/include/asm/vmx.h b/arch/x86/include/asm/vmx.h > index 713ed9a..43f1e9b 100644 > --- a/arch/x86/include/asm/vmx.h > +++ b/arch/x86/include/asm/vmx.h > @@ -364,6 +364,7 @@ enum vmcs_field { > #define VMX_EPTP_UC_BIT (1ull << 8) > #define VMX_EPTP_WB_BIT (1ull << 14) > #define VMX_EPT_2MB_PAGE_BIT (1ull << 16) > +#define VMX_EPT_1GB_PAGE_BIT (1ull << 17) > #define VMX_EPT_EXTENT_INDIVIDUAL_BIT (1ull << 24) > #define VMX_EPT_EXTENT_CONTEXT_BIT (1ull << 25) > #define VMX_EPT_EXTENT_GLOBAL_BIT (1ull << 26) > diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c > index 43cf2ea..9012541 100644 > --- a/arch/x86/kvm/mmu.c > +++ b/arch/x86/kvm/mmu.c > @@ -499,8 +499,7 @@ out: > static int mapping_level(struct kvm_vcpu *vcpu, gfn_t large_gfn) > { > struct kvm_memory_slot *slot; > - int host_level; > - int level = PT_PAGE_TABLE_LEVEL; > + int host_level, level, max_level; > > slot = gfn_to_memslot(vcpu->kvm, large_gfn); > if (slot && slot->dirty_bitmap) > @@ -511,7 +510,10 @@ static int mapping_level(struct kvm_vcpu *vcpu, gfn_t large_gfn) > if (host_level == PT_PAGE_TABLE_LEVEL) > return host_level; > > - for (level = PT_DIRECTORY_LEVEL; level <= host_level; ++level) > + max_level = kvm_x86_ops->get_lpage_level() < host_level ? > + kvm_x86_ops->get_lpage_level() : host_level; > + BUG_ON(kvm_x86_ops->get_lpage_level() < host_level) instead? See the if (host_level == PT_PAGE_TABLE_LEVEL) above.