From: Joerg Roedel Date: Tue, 9 Sep 2008 17:11:51 +0000 (+0200) Subject: KVM: SVM: fix guest global tlb flushes with NPT X-Git-Tag: v2.6.27-rc7~54^2~1 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=e5eab0cede4b1ffaca4ad857d840127622038e55;p=linux-2.6-omap-h63xx.git KVM: SVM: fix guest global tlb flushes with NPT Accesses to CR4 are intercepted even with Nested Paging enabled. But the code does not check if the guest wants to do a global TLB flush. So this flush gets lost. This patch adds the check and the flush to svm_set_cr4. Signed-off-by: Joerg Roedel Signed-off-by: Avi Kivity --- diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index d1106cddab0..8233b86c778 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -879,6 +879,10 @@ set: static void svm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) { unsigned long host_cr4_mce = read_cr4() & X86_CR4_MCE; + unsigned long old_cr4 = to_svm(vcpu)->vmcb->save.cr4; + + if (npt_enabled && ((old_cr4 ^ cr4) & X86_CR4_PGE)) + force_new_asid(vcpu); vcpu->arch.cr4 = cr4; if (!npt_enabled)