KVM: ARM: Move all vcpu init code into kvm_arch_vcpu_create()
authorSean Christopherson <sean.j.christopherson@intel.com>
Wed, 18 Dec 2019 21:55:25 +0000 (13:55 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 27 Jan 2020 18:59:30 +0000 (19:59 +0100)
Fold init() into create() now that the two are called back-to-back by
common KVM code (kvm_vcpu_init() calls kvm_arch_vcpu_init() as its last
action, and kvm_vm_ioctl_create_vcpu() calls kvm_arch_vcpu_create()
immediately thereafter).  This paves the way for removing
kvm_arch_vcpu_{un}init() entirely.

Note, there is no associated unwinding in kvm_arch_vcpu_uninit() that
needs to be relocated (to kvm_arch_vcpu_destroy()).

No functional change intended.

Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
virt/kvm/arm/arm.c

index a7d661fc5683765e680571404657b425aadb7a30..94616725b97e7940d19c36443ba406990a17c4b5 100644 (file)
@@ -292,6 +292,25 @@ int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id)
 
 int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
 {
+       int err;
+
+       /* Force users to call KVM_ARM_VCPU_INIT */
+       vcpu->arch.target = -1;
+       bitmap_zero(vcpu->arch.features, KVM_VCPU_MAX_FEATURES);
+
+       /* Set up the timer */
+       kvm_timer_vcpu_init(vcpu);
+
+       kvm_pmu_vcpu_init(vcpu);
+
+       kvm_arm_reset_debug_ptr(vcpu);
+
+       kvm_arm_pvtime_vcpu_init(&vcpu->arch);
+
+       err = kvm_vgic_vcpu_init(vcpu);
+       if (err)
+               return err;
+
        return create_hyp_mappings(vcpu, vcpu + 1, PAGE_HYP);
 }
 
@@ -341,20 +360,7 @@ void kvm_arch_vcpu_unblocking(struct kvm_vcpu *vcpu)
 
 int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
 {
-       /* Force users to call KVM_ARM_VCPU_INIT */
-       vcpu->arch.target = -1;
-       bitmap_zero(vcpu->arch.features, KVM_VCPU_MAX_FEATURES);
-
-       /* Set up the timer */
-       kvm_timer_vcpu_init(vcpu);
-
-       kvm_pmu_vcpu_init(vcpu);
-
-       kvm_arm_reset_debug_ptr(vcpu);
-
-       kvm_arm_pvtime_vcpu_init(&vcpu->arch);
-
-       return kvm_vgic_vcpu_init(vcpu);
+       return 0;
 }
 
 void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)