[PATCH] KVM: MMU: Fix regression with ept memory types merged into non-ept page tables

2010-09-13 Thread Avi Kivity
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 a...@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

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] KVM: MMU: Fix regression with ept memory types merged into non-ept page tables

2010-09-13 Thread 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 a...@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.roe...@amd.com

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html