From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] allow enabling/disabling NPT by reloading only the architecture module Date: Tue, 15 Jul 2008 13:55:37 +0300 Message-ID: <487C8229.80006@qumranet.com> References: <1216060596-6224-1-git-send-email-joerg.roedel@amd.com> <200807151413.34776.sheng.yang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, Joerg Roedel To: "Yang, Sheng" Return-path: Received: from il.qumranet.com ([212.179.150.194]:58156 "EHLO il.qumranet.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751419AbYGOK4K (ORCPT ); Tue, 15 Jul 2008 06:56:10 -0400 In-Reply-To: <200807151413.34776.sheng.yang@intel.com> Sender: kvm-owner@vger.kernel.org List-ID: Yang, Sheng wrote: > 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 >> --- >> > > > From 3dd7fa4abb1cfc702b3fbd7038d585b541f981a4 Mon Sep 17 00:00:00 2001 > From: Sheng Yang > Date: Tue, 15 Jul 2008 14:18:29 +0800 > Subject: [PATCH] KVM: VMX: Fix undefined beaviour of EPT after reload > kvm-intel.ko > > Based on Joerg Roedel's fix for NPT. > > Thanks Joerg! > > Signed-off-by: Sheng Yang > --- > 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 > --- 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); > > allocate_vpid(vmx); > - if (id == 0 && 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, > + if (id == 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); > - kvm_enable_tdp(); > + kvm_enable_tdp(); > + } else > + kvm_disable_tdp(); > } > > > hmm, what is this code doing in vmx_create_vcpu()? surely vmx_init() is a better place? -- Do not meddle in the internals of kernels, for they are subtle and quick to panic.