On 30/03/2016 12:00, Suravee Suthikulpanit wrote: > Hi Paolo, > > On 3/29/16 18:47, Suravee Suthikulpanit wrote: >> Hi, >> >> On 03/29/2016 05:21 PM, Paolo Bonzini wrote: >>> >>> >>> On 29/03/2016 07:27, Suravee Suthikulpanit wrote: >>>>> >>>>>>> Adding function pointers in struct kvm_x86_ops for >>>>>>> processor-specific >>>>>>> layer to provide hooks for when KVM initialize and un-initialize VM. >>>>> This is not the only thing your patch is doing, and the "other" change >>>>> definitely needs a lot more explanation about why you did it and how >>>>> you >>>>> audited the code to ensure that it is safe. >>>>> >>>>> Paolo >>>>> >>>> >>>> Sorry, for not mentioning this earlier. I am moving the >>>> kvm_arch_init_vm() call mainly to go after mutex_init(&kvm->slots_lock) >>>> since I am calling the x86_set_memory_region() (which uses slots_lock) >>>> in the vm_init() hooks (for AVIC initialization). >>>> >>>> Lemme re-check if this would be safe for other code. >>> >>> No problem. In the meanwhile a patch got in ("KVM: fix spin_lock_init >>> order on x86") that should help you. >>> >>> Thanks, >>> >>> Paolo >>> >> >> Right.... that's just what I need :) I'll re-base to the latest tip then. > > Actually, in the file virt/kvm/kvm_main.c, I still need to move the > kvm_arch_init_vm() to some place after the call to kvm_alloc_memslots() > since I am calling x86_set_memory_region() in the vm_init hook. > > r = -ENOMEM; > for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++) { > kvm->memslots[i] = kvm_alloc_memslots(); > if (!kvm->memslots[i]) > goto out_err_no_srcu; > } > > if (init_srcu_struct(&kvm->srcu)) > goto out_err_no_srcu; > if (init_srcu_struct(&kvm->irq_srcu)) > goto out_err_no_irq_srcu; > for (i = 0; i < KVM_NR_BUSES; i++) { > kvm->buses[i] = kzalloc(sizeof(struct kvm_io_bus), > GFP_KERNEL); > if (!kvm->buses[i]) > goto out_err; > } > //HERE > r = kvm_arch_init_vm(kvm, type); > if (r) > goto out_err; > > Do you think that would be a problem? Can you delay that to after the creation of the first VCPU? Allocating AVIC data structures is not required if userspace has not called KVM_CREATE_IRQCHIP or enabled KVM_CAP_SPLIT_IRQCHIP. Paolo -- 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