summaryrefslogtreecommitdiff
path: root/virt/kvm/kvm_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'virt/kvm/kvm_main.c')
-rw-r--r--virt/kvm/kvm_main.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 6793a7e3525a..63983588c93b 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -5931,15 +5931,15 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
if (r)
return r;
+ r = kvm_arch_hardware_setup(opaque);
+ if (r < 0)
+ goto err_hw_setup;
+
if (!zalloc_cpumask_var(&cpus_hardware_enabled, GFP_KERNEL)) {
r = -ENOMEM;
goto err_hw_enabled;
}
- r = kvm_arch_hardware_setup(opaque);
- if (r < 0)
- goto out_free_1;
-
c.ret = &r;
c.opaque = opaque;
for_each_online_cpu(cpu) {
@@ -6025,10 +6025,10 @@ out_free_3:
unregister_reboot_notifier(&kvm_reboot_notifier);
cpuhp_remove_state_nocalls(CPUHP_AP_KVM_STARTING);
out_free_2:
- kvm_arch_hardware_unsetup();
-out_free_1:
free_cpumask_var(cpus_hardware_enabled);
err_hw_enabled:
+ kvm_arch_hardware_unsetup();
+err_hw_setup:
kvm_arch_exit();
return r;
}
@@ -6055,9 +6055,9 @@ void kvm_exit(void)
cpuhp_remove_state_nocalls(CPUHP_AP_KVM_STARTING);
on_each_cpu(hardware_disable_nolock, NULL, 1);
kvm_irqfd_exit();
+ free_cpumask_var(cpus_hardware_enabled);
kvm_arch_hardware_unsetup();
kvm_arch_exit();
- free_cpumask_var(cpus_hardware_enabled);
kvm_vfio_ops_exit();
}
EXPORT_SYMBOL_GPL(kvm_exit);