From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] KVM: Fix srcu struct leakage Date: Tue, 09 Nov 2010 16:30:08 +0200 Message-ID: <4CD95AF0.4010406@redhat.com> References: <4CD93366.5000209@siemens.com> <20101109135350.GA25952@amt.cnet> <4CD953D1.90802@siemens.com> <20101109140351.GA26116@amt.cnet> <4CD955AA.8040604@siemens.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Marcelo Tosatti , kvm To: Jan Kiszka Return-path: Received: from mx1.redhat.com ([209.132.183.28]:26454 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751065Ab0KIOaO (ORCPT ); Tue, 9 Nov 2010 09:30:14 -0500 In-Reply-To: <4CD955AA.8040604@siemens.com> Sender: kvm-owner@vger.kernel.org List-ID: On 11/09/2010 04:07 PM, Jan Kiszka wrote: > > > > kvm_iommu_unmap_guest enters SRCU critical section, and "struct kvm" is > > freed at the end of kvm_arch_destroy_vm. Thats why its not in generic > > code. > > The problem is the arch-specific allocation of the kvm object on IA64. > All others simply call kmalloc/kzalloc for the struct itself, but IA64 > embeds it into some larger context. Not sure why, though. ia64 virt is special - the guest has a virtual address space for host data. This data is shared with the host address space, but on different addresses. I guess to reduce tlb costs ia64 kvm uses a large order allocation for both struct kvm and other random data, which is why the allocation is different. It could be refactored to something like #ifndef CONFIG_HAVE_SPECIAL_KVM_ALLOC static inline struct kvm *kvm_arch_alloc_vm(void) { return kzalloc(...); } static inline void kvm_arch_free_vm(struct kvm *kvm) { kfree(kvm); } #endif and have ia64 provide its special stuff. The practice of duplicating common code just because of one outlier is bad, there are better ways. (and I will accept untested ia64 patches provided kvm-ia64@ is copied). -- error compiling committee.c: too many arguments to function