| From mtosatti@redhat.com Thu Sep 3 14:23:03 2009 |
| From: Gleb Natapov <gleb@redhat.com> |
| Date: Mon, 3 Aug 2009 14:57:51 -0300 |
| Subject: KVM: MMU: do not free active mmu pages in free_mmu_pages() |
| To: stable@kernel.org |
| Cc: avi@redhat.com, Gleb Natapov <gleb@redhat.com> |
| Message-ID: <1249322277-5824-4-git-send-email-mtosatti@redhat.com> |
| |
| |
| From: Gleb Natapov <gleb@redhat.com> |
| |
| (cherry picked from commit f00be0cae4e6ad0a8c7be381c6d9be3586800b3e) |
| |
| free_mmu_pages() should only undo what alloc_mmu_pages() does. |
| Free mmu pages from the generic VM destruction function, kvm_destroy_vm(). |
| |
| Signed-off-by: Gleb Natapov <gleb@redhat.com> |
| Signed-off-by: Avi Kivity <avi@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| arch/x86/kvm/mmu.c | 8 -------- |
| virt/kvm/kvm_main.c | 2 ++ |
| 2 files changed, 2 insertions(+), 8 deletions(-) |
| |
| --- a/arch/x86/kvm/mmu.c |
| +++ b/arch/x86/kvm/mmu.c |
| @@ -2657,14 +2657,6 @@ EXPORT_SYMBOL_GPL(kvm_disable_tdp); |
| |
| static void free_mmu_pages(struct kvm_vcpu *vcpu) |
| { |
| - struct kvm_mmu_page *sp; |
| - |
| - while (!list_empty(&vcpu->kvm->arch.active_mmu_pages)) { |
| - sp = container_of(vcpu->kvm->arch.active_mmu_pages.next, |
| - struct kvm_mmu_page, link); |
| - kvm_mmu_zap_page(vcpu->kvm, sp); |
| - cond_resched(); |
| - } |
| free_page((unsigned long)vcpu->arch.mmu.pae_root); |
| } |
| |
| --- a/virt/kvm/kvm_main.c |
| +++ b/virt/kvm/kvm_main.c |
| @@ -881,6 +881,8 @@ static void kvm_destroy_vm(struct kvm *k |
| #endif |
| #if defined(CONFIG_MMU_NOTIFIER) && defined(KVM_ARCH_WANT_MMU_NOTIFIER) |
| mmu_notifier_unregister(&kvm->mmu_notifier, kvm->mm); |
| +#else |
| + kvm_arch_flush_shadow(kvm); |
| #endif |
| kvm_arch_destroy_vm(kvm); |
| mmdrop(mm); |