From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Sheng" Subject: [PATCH 2/2] KVM: VMX: Fix undefined beaviour of EPT after reload kvm-intel.ko Date: Wed, 16 Jul 2008 14:29:22 +0800 Message-ID: <200807161429.22579.sheng.yang@intel.com> Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_CVZfIphh6k5pNEP" Cc: Avi Kivity To: kvm@vger.kernel.org Return-path: Received: from mga01.intel.com ([192.55.52.88]:20813 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750736AbYGPG1o (ORCPT ); Wed, 16 Jul 2008 02:27:44 -0400 Sender: kvm-owner@vger.kernel.org List-ID: --Boundary-00=_CVZfIphh6k5pNEP Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline =46rom bcbe1b5c4c6098f122accba4f00f6617baf807f7 Mon Sep 17 00:00:00 2001 =46rom: Sheng Yang Date: Wed, 16 Jul 2008 09:25:40 +0800 Subject: [PATCH] KVM: VMX: Fix undefined beaviour of EPT after reload=20 kvm-intel.ko As well as move set base/mask ptes to vmx_init(). Signed-off-by: Sheng Yang =2D-- arch/x86/kvm/vmx.c | 20 ++++++++++---------- 1 files changed, 10 insertions(+), 10 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index d47c3f8..baddb6e 100644 =2D-- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -3108,15 +3108,6 @@ static struct kvm_vcpu *vmx_create_vcpu(struct=20 kvm *kvm, unsigned int id) return ERR_PTR(-ENOMEM); allocate_vpid(vmx); =2D if (id =3D=3D 0 && vm_need_ept()) { =2D kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | =2D VMX_EPT_WRITABLE_MASK | =2D VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); =2D kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK, =2D VMX_EPT_FAKE_DIRTY_MASK, 0ull, =2D VMX_EPT_EXECUTABLE_MASK); =2D kvm_enable_tdp(); =2D } err =3D kvm_vcpu_init(&vmx->vcpu, kvm, id); if (err) @@ -3294,8 +3285,17 @@ static int __init vmx_init(void) vmx_disable_intercept_for_msr(vmx_msr_bitmap,=20 MSR_IA32_SYSENTER_ESP); vmx_disable_intercept_for_msr(vmx_msr_bitmap,=20 MSR_IA32_SYSENTER_EIP); =2D if (vm_need_ept()) + if (vm_need_ept()) { bypass_guest_pf =3D 0; + kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | + VMX_EPT_WRITABLE_MASK | + VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); + kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK, + VMX_EPT_FAKE_DIRTY_MASK, 0ull, + VMX_EPT_EXECUTABLE_MASK); + kvm_enable_tdp(); + } else + kvm_disable_tdp(); if (bypass_guest_pf) kvm_mmu_set_nonpresent_ptes(~0xffeull, 0ull); =2D- 1.5.6 --Boundary-00=_CVZfIphh6k5pNEP Content-Type: text/x-diff; charset="utf-8"; name="0002-KVM-VMX-Fix-undefined-beaviour-of-EPT-after-reload.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0002-KVM-VMX-Fix-undefined-beaviour-of-EPT-after-reload.patch" =46rom bcbe1b5c4c6098f122accba4f00f6617baf807f7 Mon Sep 17 00:00:00 2001 =46rom: Sheng Yang Date: Wed, 16 Jul 2008 09:25:40 +0800 Subject: [PATCH] KVM: VMX: Fix undefined beaviour of EPT after reload kvm-i= ntel.ko As well as move set base/mask ptes to vmx_init(). Signed-off-by: Sheng Yang =2D-- arch/x86/kvm/vmx.c | 20 ++++++++++---------- 1 files changed, 10 insertions(+), 10 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index d47c3f8..baddb6e 100644 =2D-- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -3108,15 +3108,6 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *= kvm, unsigned int id) return ERR_PTR(-ENOMEM); =20 allocate_vpid(vmx); =2D if (id =3D=3D 0 && vm_need_ept()) { =2D kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | =2D VMX_EPT_WRITABLE_MASK | =2D VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); =2D kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK, =2D VMX_EPT_FAKE_DIRTY_MASK, 0ull, =2D VMX_EPT_EXECUTABLE_MASK); =2D kvm_enable_tdp(); =2D } =20 err =3D kvm_vcpu_init(&vmx->vcpu, kvm, id); if (err) @@ -3294,8 +3285,17 @@ static int __init vmx_init(void) vmx_disable_intercept_for_msr(vmx_msr_bitmap, MSR_IA32_SYSENTER_ESP); vmx_disable_intercept_for_msr(vmx_msr_bitmap, MSR_IA32_SYSENTER_EIP); =20 =2D if (vm_need_ept()) + if (vm_need_ept()) { bypass_guest_pf =3D 0; + kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | + VMX_EPT_WRITABLE_MASK | + VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); + kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK, + VMX_EPT_FAKE_DIRTY_MASK, 0ull, + VMX_EPT_EXECUTABLE_MASK); + kvm_enable_tdp(); + } else + kvm_disable_tdp(); =20 if (bypass_guest_pf) kvm_mmu_set_nonpresent_ptes(~0xffeull, 0ull); =2D-=20 1.5.6 --Boundary-00=_CVZfIphh6k5pNEP--