Merge tag 'kvm-s390-next-5.6-1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / arch / powerpc / kvm / e500.c
index 00649ca5fa9a0977893773f83112b4a6cc85a8f2..f2b4feaff6d226b72a2f883643c65f8d3dafe381 100644 (file)
@@ -433,31 +433,16 @@ static int kvmppc_set_one_reg_e500(struct kvm_vcpu *vcpu, u64 id,
        return r;
 }
 
-static struct kvm_vcpu *kvmppc_core_vcpu_create_e500(struct kvm *kvm,
-                                                    unsigned int id)
+static int kvmppc_core_vcpu_create_e500(struct kvm_vcpu *vcpu)
 {
        struct kvmppc_vcpu_e500 *vcpu_e500;
-       struct kvm_vcpu *vcpu;
        int err;
 
-       BUILD_BUG_ON_MSG(offsetof(struct kvmppc_vcpu_e500, vcpu) != 0,
-               "struct kvm_vcpu must be at offset 0 for arch usercopy region");
+       BUILD_BUG_ON(offsetof(struct kvmppc_vcpu_e500, vcpu) != 0);
+       vcpu_e500 = to_e500(vcpu);
 
-       vcpu_e500 = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL);
-       if (!vcpu_e500) {
-               err = -ENOMEM;
-               goto out;
-       }
-
-       vcpu = &vcpu_e500->vcpu;
-       err = kvm_vcpu_init(vcpu, kvm, id);
-       if (err)
-               goto free_vcpu;
-
-       if (kvmppc_e500_id_table_alloc(vcpu_e500) == NULL) {
-               err = -ENOMEM;
-               goto uninit_vcpu;
-       }
+       if (kvmppc_e500_id_table_alloc(vcpu_e500) == NULL)
+               return -ENOMEM;
 
        err = kvmppc_e500_tlb_init(vcpu_e500);
        if (err)
@@ -469,18 +454,13 @@ static struct kvm_vcpu *kvmppc_core_vcpu_create_e500(struct kvm *kvm,
                goto uninit_tlb;
        }
 
-       return vcpu;
+       return 0;
 
 uninit_tlb:
        kvmppc_e500_tlb_uninit(vcpu_e500);
 uninit_id:
        kvmppc_e500_id_table_free(vcpu_e500);
-uninit_vcpu:
-       kvm_vcpu_uninit(vcpu);
-free_vcpu:
-       kmem_cache_free(kvm_vcpu_cache, vcpu_e500);
-out:
-       return ERR_PTR(err);
+       return err;
 }
 
 static void kvmppc_core_vcpu_free_e500(struct kvm_vcpu *vcpu)
@@ -490,8 +470,6 @@ static void kvmppc_core_vcpu_free_e500(struct kvm_vcpu *vcpu)
        free_page((unsigned long)vcpu->arch.shared);
        kvmppc_e500_tlb_uninit(vcpu_e500);
        kvmppc_e500_id_table_free(vcpu_e500);
-       kvm_vcpu_uninit(vcpu);
-       kmem_cache_free(kvm_vcpu_cache, vcpu_e500);
 }
 
 static int kvmppc_core_init_vm_e500(struct kvm *kvm)