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
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html