From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Sheng" Subject: Re: [PATCH] allow enabling/disabling NPT by reloading only the architecture module Date: Tue, 15 Jul 2008 14:13:34 +0800 Message-ID: <200807151413.34776.sheng.yang@intel.com> References: <1216060596-6224-1-git-send-email-joerg.roedel@amd.com> Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_OAEfISMZiAAfol3" Cc: Joerg Roedel , Avi Kivity To: kvm@vger.kernel.org Return-path: Received: from mga09.intel.com ([134.134.136.24]:36708 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753914AbYGOGMA (ORCPT ); Tue, 15 Jul 2008 02:12:00 -0400 In-Reply-To: <1216060596-6224-1-git-send-email-joerg.roedel@amd.com> Sender: kvm-owner@vger.kernel.org List-ID: --Boundary-00=_OAEfISMZiAAfol3 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Tuesday 15 July 2008 02:36:36 Joerg Roedel wrote: > If NPT is enabled after loading both KVM modules on AMD and it > should be disabled, both KVM modules must be reloaded. If only the > architecture module is reloaded the behavior is undefined. With > this patch it is possible to disable NPT only by reloading the > kvm_amd module. > > Signed-off-by: Joerg Roedel > --- =46rom 3dd7fa4abb1cfc702b3fbd7038d585b541f981a4 Mon Sep 17 00:00:00 2001 =46rom: Sheng Yang Date: Tue, 15 Jul 2008 14:18:29 +0800 Subject: [PATCH] KVM: VMX: Fix undefined beaviour of EPT after reload=20 kvm-intel.ko Based on Joerg Roedel's fix for NPT. Thanks Joerg! Signed-off-by: Sheng Yang =2D-- arch/x86/kvm/vmx.c | 15 +++++++++------ 1 files changed, 9 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 5f807e3..374e1ca 100644 =2D-- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -3108,14 +3108,17 @@ 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, + if (id =3D=3D 0) { + if (vm_need_ept()) { + 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); =2D kvm_enable_tdp(); + kvm_enable_tdp(); + } else + kvm_disable_tdp(); } err =3D kvm_vcpu_init(&vmx->vcpu, kvm, id); =2D- 1.5.4.5 --Boundary-00=_OAEfISMZiAAfol3 Content-Type: text/x-diff; charset="utf-8"; name="0001-KVM-VMX-Fix-undefined-beaviour-of-EPT-after-reload.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0001-KVM-VMX-Fix-undefined-beaviour-of-EPT-after-reload.patch" =46rom 3dd7fa4abb1cfc702b3fbd7038d585b541f981a4 Mon Sep 17 00:00:00 2001 =46rom: Sheng Yang Date: Tue, 15 Jul 2008 14:18:29 +0800 Subject: [PATCH] KVM: VMX: Fix undefined beaviour of EPT after reload kvm-i= ntel.ko Based on Joerg Roedel's fix for NPT. Thanks Joerg! Signed-off-by: Sheng Yang =2D-- arch/x86/kvm/vmx.c | 15 +++++++++------ 1 files changed, 9 insertions(+), 6 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 5f807e3..374e1ca 100644 =2D-- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -3108,14 +3108,17 @@ 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, + if (id =3D=3D 0) { + if (vm_need_ept()) { + 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); =2D kvm_enable_tdp(); + kvm_enable_tdp(); + } else + kvm_disable_tdp(); } =20 err =3D kvm_vcpu_init(&vmx->vcpu, kvm, id); =2D-=20 1.5.4.5 --Boundary-00=_OAEfISMZiAAfol3--