void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) { kvm_mmu_free_memory_caches(vcpu); kvm_timer_vcpu_terminate(vcpu); kvm_vgic_vcpu_destroy(vcpu); kvm_pmu_vcpu_destroy(vcpu); kvm_vcpu_uninit(vcpu); kmem_cache_free(kvm_vcpu_cache, vcpu); }
struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, unsigned int id) { int err; struct kvm_vcpu *vcpu; if (irqchip_in_kernel(kvm) && vgic_initialized(kvm)) { err = -EBUSY; goto out; } if (id >= kvm->arch.max_vcpus) { err = -EINVAL; goto out; } vcpu = kmem_cache_zalloc(kvm_vcpu_cache, GFP_KERNEL); if (!vcpu) { err = -ENOMEM; goto out; } err = kvm_vcpu_init(vcpu, kvm, id); if (err) goto free_vcpu; err = create_hyp_mappings(vcpu, vcpu + 1); if (err) goto vcpu_uninit; return vcpu; vcpu_uninit: kvm_vcpu_uninit(vcpu); free_vcpu: kmem_cache_free(kvm_vcpu_cache, vcpu); out: return ERR_PTR(err); }
void kvmppc_core_vcpu_free(struct kvm_vcpu *vcpu) { kvm_vcpu_uninit(vcpu); kfree(vcpu); }
void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu) { kvm_vcpu_uninit(vcpu); kmem_cache_free(kvm_vcpu_cache, vcpu); }