kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] KVM: MMU: Fix regression with ept memory types merged into non-ept page tables
@ 2010-09-13 14:56 Avi Kivity
  2010-09-13 18:01 ` Joerg Roedel
  0 siblings, 1 reply; 2+ messages in thread
From: Avi Kivity @ 2010-09-13 14:56 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm, Joerg Roedel

Commit "KVM: MMU: Make tdp_enabled a mmu-context parameter" made real-mode
set ->direct_map, and changed the code that merges in the memory type depend
on direct_map instead of tdp_enabled.  However, in this case what really
matters is tdp, not direct_map, since tdp changes the pte format regardless
of whether the mapping is direct or not.

As a result, real-mode shadow mappings got corrupted with ept memory types.
The result was a huge slowdown, likely due to the cache being disabled.

Change it back as the simplest fix for the regression (real fix is to move
all that to vmx code, and not use tdp_enabled as a synonym for ept).

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 arch/x86/kvm/mmu.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 6e248d8..3ce56bf 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -1980,7 +1980,7 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *sptep,
 		spte |= shadow_user_mask;
 	if (level > PT_PAGE_TABLE_LEVEL)
 		spte |= PT_PAGE_SIZE_MASK;
-	if (vcpu->arch.mmu.direct_map)
+	if (tdp_enabled)
 		spte |= kvm_x86_ops->get_mt_mask(vcpu, gfn,
 			kvm_is_mmio_pfn(pfn));
 
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] KVM: MMU: Fix regression with ept memory types merged into non-ept page tables
  2010-09-13 14:56 [PATCH] KVM: MMU: Fix regression with ept memory types merged into non-ept page tables Avi Kivity
@ 2010-09-13 18:01 ` Joerg Roedel
  0 siblings, 0 replies; 2+ messages in thread
From: Joerg Roedel @ 2010-09-13 18:01 UTC (permalink / raw)
  To: Avi Kivity; +Cc: Marcelo Tosatti, kvm, Joerg Roedel

On Mon, Sep 13, 2010 at 04:56:19PM +0200, Avi Kivity wrote:
> Commit "KVM: MMU: Make tdp_enabled a mmu-context parameter" made real-mode
> set ->direct_map, and changed the code that merges in the memory type depend
> on direct_map instead of tdp_enabled.  However, in this case what really
> matters is tdp, not direct_map, since tdp changes the pte format regardless
> of whether the mapping is direct or not.
> 
> As a result, real-mode shadow mappings got corrupted with ept memory types.
> The result was a huge slowdown, likely due to the cache being disabled.
> 
> Change it back as the simplest fix for the regression (real fix is to move
> all that to vmx code, and not use tdp_enabled as a synonym for ept).
> 
> Signed-off-by: Avi Kivity <avi@redhat.com>
> ---
>  arch/x86/kvm/mmu.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
> index 6e248d8..3ce56bf 100644
> --- a/arch/x86/kvm/mmu.c
> +++ b/arch/x86/kvm/mmu.c
> @@ -1980,7 +1980,7 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *sptep,
>  		spte |= shadow_user_mask;
>  	if (level > PT_PAGE_TABLE_LEVEL)
>  		spte |= PT_PAGE_SIZE_MASK;
> -	if (vcpu->arch.mmu.direct_map)
> +	if (tdp_enabled)
>  		spte |= kvm_x86_ops->get_mt_mask(vcpu, gfn,
>  			kvm_is_mmio_pfn(pfn));

Oh, indeed. Thanks for fixing this.

Acked-by: Joerg Roedel <joerg.roedel@amd.com>


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-09-13 18:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-13 14:56 [PATCH] KVM: MMU: Fix regression with ept memory types merged into non-ept page tables Avi Kivity
2010-09-13 18:01 ` Joerg Roedel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).