aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2010-09-13 10:45:28 -0400
committerAvi Kivity <avi@redhat.com>2010-10-24 04:52:49 -0400
commitb0bc3ee2b54fcea0df42cc9aa05103b1ccd89db0 (patch)
tree15f55e178b86b69116bff5f1e53a1fbcd88ed033
parentc39cbd2a0012334714409eec1e9cf4d542e359e9 (diff)
KVM: MMU: Fix regression with ept memory types merged into non-ept page tables
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>
-rw-r--r--arch/x86/kvm/mmu.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 6e248d80e350..3ce56bfe056e 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,
1980 spte |= shadow_user_mask; 1980 spte |= shadow_user_mask;
1981 if (level > PT_PAGE_TABLE_LEVEL) 1981 if (level > PT_PAGE_TABLE_LEVEL)
1982 spte |= PT_PAGE_SIZE_MASK; 1982 spte |= PT_PAGE_SIZE_MASK;
1983 if (vcpu->arch.mmu.direct_map) 1983 if (tdp_enabled)
1984 spte |= kvm_x86_ops->get_mt_mask(vcpu, gfn, 1984 spte |= kvm_x86_ops->get_mt_mask(vcpu, gfn,
1985 kvm_is_mmio_pfn(pfn)); 1985 kvm_is_mmio_pfn(pfn));
1986 1986