mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
KVM: Clean up vm creation and release
IA64 support forces us to abstract the allocation of the kvm structure. But instead of mixing this up with arch-specific initialization and doing the same on destruction, split both steps. This allows to move generic destruction calls into generic code. It also fixes error clean-up on failures of kvm_create_vm for IA64. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
9d893c6bc1
commit
d89f5eff70
7 changed files with 49 additions and 72 deletions
|
@ -383,11 +383,15 @@ static int kvm_init_mmu_notifier(struct kvm *kvm)
|
|||
|
||||
static struct kvm *kvm_create_vm(void)
|
||||
{
|
||||
int r = 0, i;
|
||||
struct kvm *kvm = kvm_arch_create_vm();
|
||||
int r, i;
|
||||
struct kvm *kvm = kvm_arch_alloc_vm();
|
||||
|
||||
if (IS_ERR(kvm))
|
||||
goto out;
|
||||
if (!kvm)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
r = kvm_arch_init_vm(kvm);
|
||||
if (r)
|
||||
goto out_err_nodisable;
|
||||
|
||||
r = hardware_enable_all();
|
||||
if (r)
|
||||
|
@ -427,7 +431,7 @@ static struct kvm *kvm_create_vm(void)
|
|||
spin_lock(&kvm_lock);
|
||||
list_add(&kvm->vm_list, &vm_list);
|
||||
spin_unlock(&kvm_lock);
|
||||
out:
|
||||
|
||||
return kvm;
|
||||
|
||||
out_err:
|
||||
|
@ -438,7 +442,7 @@ out_err_nodisable:
|
|||
for (i = 0; i < KVM_NR_BUSES; i++)
|
||||
kfree(kvm->buses[i]);
|
||||
kfree(kvm->memslots);
|
||||
kfree(kvm);
|
||||
kvm_arch_free_vm(kvm);
|
||||
return ERR_PTR(r);
|
||||
}
|
||||
|
||||
|
@ -512,6 +516,9 @@ static void kvm_destroy_vm(struct kvm *kvm)
|
|||
kvm_arch_flush_shadow(kvm);
|
||||
#endif
|
||||
kvm_arch_destroy_vm(kvm);
|
||||
kvm_free_physmem(kvm);
|
||||
cleanup_srcu_struct(&kvm->srcu);
|
||||
kvm_arch_free_vm(kvm);
|
||||
hardware_disable_all();
|
||||
mmdrop(mm);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue