]> Pileus Git - ~andy/linux/blobdiff - arch/powerpc/kvm/e500.c
KVM: PPC: Introduce shared page
[~andy/linux] / arch / powerpc / kvm / e500.c
index e8a00b0c444912d3b1bd0b300e9869942dc48198..71750f2dd5d34378c963acf7bf9d3a69a15863cc 100644 (file)
@@ -117,8 +117,14 @@ struct kvm_vcpu *kvmppc_core_vcpu_create(struct kvm *kvm, unsigned int id)
        if (err)
                goto uninit_vcpu;
 
+       vcpu->arch.shared = (void*)__get_free_page(GFP_KERNEL|__GFP_ZERO);
+       if (!vcpu->arch.shared)
+               goto uninit_tlb;
+
        return vcpu;
 
+uninit_tlb:
+       kvmppc_e500_tlb_uninit(vcpu_e500);
 uninit_vcpu:
        kvm_vcpu_uninit(vcpu);
 free_vcpu:
@@ -131,6 +137,7 @@ void kvmppc_core_vcpu_free(struct kvm_vcpu *vcpu)
 {
        struct kvmppc_vcpu_e500 *vcpu_e500 = to_e500(vcpu);
 
+       free_page((unsigned long)vcpu->arch.shared);
        kvmppc_e500_tlb_uninit(vcpu_e500);
        kvm_vcpu_uninit(vcpu);
        kmem_cache_free(kvm_vcpu_cache, vcpu_e500);