Am 09.11.2010 15:30, Avi Kivity wrote: > 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 Yep, that's what I'm already working on. > > 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). OK, will come. Refactoring will affect all archs, so all need to test and ack. Jan -- Siemens AG, Corporate Technology, CT T DE IT 1 Corporate Competence Center Embedded Linux -- 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