On Wed, Oct 16, 2019 at 12:40:32AM +0800, Xiaoyao Li wrote: > Current x86 arch vcpu creation flow is a little bit messed. > Specifically, vcpu's data structure allocation and vcpu initialization > are mixed up, which is unfriendly to read. > > Seperating the vcpu_create and vcpu_init just like what ARM does, that > it first calls vcpu_create related functions for vcpu's data structure > allocation and then calls vcpu_init related functions to initialize the > vcpu. My vote is to take advantage of the requirement that @vcpu must reside at offset 0 in vmx_vcpu and svm_vcpu, and allocate the vcpu in x86 code. That would allow kvm_arch_vcpu_create() to invoke kvm_vcpu_init() directly instead of bouncing through the vendor code. And if we're extra lucky and the other architectures can use a similar pattern, kvm_vm_ioctl_create_vcpu() could be refactored to something like: vcpu = kvm_arch_vcpu_alloc(kvm, id); if (IS_ERR(vcpu)) { r = PTR_ERR(vcpu); goto vcpu_decrement; } r = kvm_arch_vcpu_init(vcpu); if (r) goto vcpu_destroy;