Re: 2.6.25-rc5-git5 KVM memory not freed

From: Avi Kivity
Date: Sun Mar 23 2008 - 08:21:11 EST


Avi Kivity wrote:
Ioan Ionita wrote:
Hi,

I'm using KVM and the qemu kvm modified to run a windows guest. I'm
allocating 900 MB to the guest. Seems that when I terminate a qemu
process, the memory that was allocated to qemu is not freed:


Mem: 2058140 1739156 318984 0 226944 425140
-/+ buffers/cache: 1087072 971068
Swap: 0 0 0

So I'm using 1GB of ram even though I've terminated qemu. If I attempt
to start qemu again, the machine locks up. No message in the logs.

Command to start qemu:
/usr/local/kvm/bin/qemu-system-x86_64 b.data -no-acpi -m 900 -net nic
-net user -hdb temp.raw -usbdevice tablet

uname -a
Linux ops-desktop 2.6.25-rc5-git5 #1 SMP PREEMPT Sat Mar 15 14:47:25
EET 2008 x86_64 GNU/Linux


Not sure whether this is a problem on the kernel side. I don't
pretend to understand linux memory management. But it wasn't occurring
with older kernels. I'll attempt to bisect.

I reproduced this and am investigating.



Attached patch ought to fix this.

--
error compiling committee.c: too many arguments to function

diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index 4ba85d9..e55af12 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -1412,7 +1412,7 @@ static void mmu_guess_page_from_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
up_read(&current->mm->mmap_sem);

vcpu->arch.update_pte.gfn = gfn;
- vcpu->arch.update_pte.page = gfn_to_page(vcpu->kvm, gfn);
+ vcpu->arch.update_pte.page = page;
}

void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,