mirror of
https://github.com/torvalds/linux
synced 2024-11-05 18:23:50 +00:00
KVM: Refactor srcu struct release on early errors
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
30bd0c4c6c
commit
57e7fbee1d
1 changed files with 6 additions and 8 deletions
|
@ -401,23 +401,19 @@ static struct kvm *kvm_create_vm(void)
|
||||||
r = -ENOMEM;
|
r = -ENOMEM;
|
||||||
kvm->memslots = kzalloc(sizeof(struct kvm_memslots), GFP_KERNEL);
|
kvm->memslots = kzalloc(sizeof(struct kvm_memslots), GFP_KERNEL);
|
||||||
if (!kvm->memslots)
|
if (!kvm->memslots)
|
||||||
goto out_err;
|
goto out_err_nosrcu;
|
||||||
if (init_srcu_struct(&kvm->srcu))
|
if (init_srcu_struct(&kvm->srcu))
|
||||||
goto out_err;
|
goto out_err_nosrcu;
|
||||||
for (i = 0; i < KVM_NR_BUSES; i++) {
|
for (i = 0; i < KVM_NR_BUSES; i++) {
|
||||||
kvm->buses[i] = kzalloc(sizeof(struct kvm_io_bus),
|
kvm->buses[i] = kzalloc(sizeof(struct kvm_io_bus),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!kvm->buses[i]) {
|
if (!kvm->buses[i])
|
||||||
cleanup_srcu_struct(&kvm->srcu);
|
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r = kvm_init_mmu_notifier(kvm);
|
r = kvm_init_mmu_notifier(kvm);
|
||||||
if (r) {
|
if (r)
|
||||||
cleanup_srcu_struct(&kvm->srcu);
|
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
|
||||||
|
|
||||||
kvm->mm = current->mm;
|
kvm->mm = current->mm;
|
||||||
atomic_inc(&kvm->mm->mm_count);
|
atomic_inc(&kvm->mm->mm_count);
|
||||||
|
@ -435,6 +431,8 @@ static struct kvm *kvm_create_vm(void)
|
||||||
return kvm;
|
return kvm;
|
||||||
|
|
||||||
out_err:
|
out_err:
|
||||||
|
cleanup_srcu_struct(&kvm->srcu);
|
||||||
|
out_err_nosrcu:
|
||||||
hardware_disable_all();
|
hardware_disable_all();
|
||||||
out_err_nodisable:
|
out_err_nodisable:
|
||||||
for (i = 0; i < KVM_NR_BUSES; i++)
|
for (i = 0; i < KVM_NR_BUSES; i++)
|
||||||
|
|
Loading…
Reference in a new issue