]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/powerpc/kvm/e500.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
[mv-sheeva.git] / arch / powerpc / kvm / e500.c
index bc2b4004eb265a70ea4b082693e0b9eb9cf49e3f..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);
@@ -164,7 +171,7 @@ static int __init kvmppc_e500_init(void)
        return kvm_init(NULL, sizeof(struct kvmppc_vcpu_e500), 0, THIS_MODULE);
 }
 
-static void __init kvmppc_e500_exit(void)
+static void __exit kvmppc_e500_exit(void)
 {
        kvmppc_booke_exit();
 }