KVM: PPC: Move guest enter/exit down into subarch-specific code
[pandora-kernel.git] / arch / powerpc / kvm / powerpc.c
index 616dd51..026036e 100644 (file)
@@ -73,7 +73,8 @@ int kvmppc_kvm_pv(struct kvm_vcpu *vcpu)
        }
        case HC_VENDOR_KVM | KVM_HC_FEATURES:
                r = HC_EV_SUCCESS;
-#if defined(CONFIG_PPC_BOOK3S) /* XXX Missing magic page on BookE */
+#if defined(CONFIG_PPC_BOOK3S) || defined(CONFIG_KVM_E500)
+               /* XXX Missing magic page on 44x */
                r2 |= (1 << KVM_FEATURE_MAGIC_PAGE);
 #endif
 
@@ -147,7 +148,7 @@ void kvm_arch_check_processor_compat(void *rtn)
 
 int kvm_arch_init_vm(struct kvm *kvm)
 {
-       return 0;
+       return kvmppc_core_init_vm(kvm);
 }
 
 void kvm_arch_destroy_vm(struct kvm *kvm)
@@ -163,6 +164,9 @@ void kvm_arch_destroy_vm(struct kvm *kvm)
                kvm->vcpus[i] = NULL;
 
        atomic_set(&kvm->online_vcpus, 0);
+
+       kvmppc_core_destroy_vm(kvm);
+
        mutex_unlock(&kvm->lock);
 }
 
@@ -211,7 +215,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
                                    struct kvm_userspace_memory_region *mem,
                                    int user_alloc)
 {
-       return 0;
+       return kvmppc_core_prepare_memory_region(kvm, mem);
 }
 
 void kvm_arch_commit_memory_region(struct kvm *kvm,
@@ -219,7 +223,7 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,
                struct kvm_memory_slot old,
                int user_alloc)
 {
-       return;
+       kvmppc_core_commit_memory_region(kvm, mem);
 }
 
 
@@ -496,11 +500,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run)
 
        kvmppc_core_deliver_interrupts(vcpu);
 
-       local_irq_disable();
-       kvm_guest_enter();
-       r = __kvmppc_vcpu_run(run, vcpu);
-       kvm_guest_exit();
-       local_irq_enable();
+       r = kvmppc_vcpu_run(run, vcpu);
 
        if (vcpu->sigset_active)
                sigprocmask(SIG_SETMASK, &sigsaved, NULL);