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) {
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;
}
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);