diff options
Diffstat (limited to 'arch/powerpc/kvm/powerpc.c')
-rw-r--r-- | arch/powerpc/kvm/powerpc.c | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 2cf915e51e7e..2a4551f78f60 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c | |||
@@ -31,25 +31,17 @@ | |||
31 | #include "timing.h" | 31 | #include "timing.h" |
32 | #include "../mm/mmu_decl.h" | 32 | #include "../mm/mmu_decl.h" |
33 | 33 | ||
34 | #define CREATE_TRACE_POINTS | ||
35 | #include "trace.h" | ||
36 | |||
34 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn) | 37 | gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn) |
35 | { | 38 | { |
36 | return gfn; | 39 | return gfn; |
37 | } | 40 | } |
38 | 41 | ||
39 | int kvm_cpu_has_interrupt(struct kvm_vcpu *v) | ||
40 | { | ||
41 | return !!(v->arch.pending_exceptions); | ||
42 | } | ||
43 | |||
44 | int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) | ||
45 | { | ||
46 | /* do real check here */ | ||
47 | return 1; | ||
48 | } | ||
49 | |||
50 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) | 42 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) |
51 | { | 43 | { |
52 | return !(v->arch.msr & MSR_WE); | 44 | return !(v->arch.msr & MSR_WE) || !!(v->arch.pending_exceptions); |
53 | } | 45 | } |
54 | 46 | ||
55 | 47 | ||
@@ -122,13 +114,17 @@ struct kvm *kvm_arch_create_vm(void) | |||
122 | static void kvmppc_free_vcpus(struct kvm *kvm) | 114 | static void kvmppc_free_vcpus(struct kvm *kvm) |
123 | { | 115 | { |
124 | unsigned int i; | 116 | unsigned int i; |
117 | struct kvm_vcpu *vcpu; | ||
125 | 118 | ||
126 | for (i = 0; i < KVM_MAX_VCPUS; ++i) { | 119 | kvm_for_each_vcpu(i, vcpu, kvm) |
127 | if (kvm->vcpus[i]) { | 120 | kvm_arch_vcpu_free(vcpu); |
128 | kvm_arch_vcpu_free(kvm->vcpus[i]); | 121 | |
129 | kvm->vcpus[i] = NULL; | 122 | mutex_lock(&kvm->lock); |
130 | } | 123 | for (i = 0; i < atomic_read(&kvm->online_vcpus); i++) |
131 | } | 124 | kvm->vcpus[i] = NULL; |
125 | |||
126 | atomic_set(&kvm->online_vcpus, 0); | ||
127 | mutex_unlock(&kvm->lock); | ||
132 | } | 128 | } |
133 | 129 | ||
134 | void kvm_arch_sync_events(struct kvm *kvm) | 130 | void kvm_arch_sync_events(struct kvm *kvm) |