summaryrefslogtreecommitdiff
path: root/arch/powerpc/kvm/booke.c
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2012-07-31 00:19:50 +0200
committerAlexander Graf <agraf@suse.de>2012-10-05 23:38:41 +0200
commit862d31f788f9a249f7656d02d8d4006e306108ce (patch)
tree8e75005b5496a8418537f29a6e01e627498caf29 /arch/powerpc/kvm/booke.c
parentd69c6436443c05a64452054f51a79316297755f4 (diff)
downloadlwn-862d31f788f9a249f7656d02d8d4006e306108ce.tar.gz
lwn-862d31f788f9a249f7656d02d8d4006e306108ce.zip
KVM: PPC: E500: Implement MMU notifiers
The e500 target has lived without mmu notifiers ever since it got introduced, but fails for the user space check on them with hugetlbfs. So in order to get that one working, implement mmu notifiers in a reasonably dumb fashion and be happy. On embedded hardware, we almost never end up with mmu notifier calls, since most people don't overcommit. Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc/kvm/booke.c')
-rw-r--r--arch/powerpc/kvm/booke.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
index 70a86c0a9d85..52f6cbb4923e 100644
--- a/arch/powerpc/kvm/booke.c
+++ b/arch/powerpc/kvm/booke.c
@@ -459,6 +459,10 @@ static void kvmppc_check_requests(struct kvm_vcpu *vcpu)
if (vcpu->requests) {
if (kvm_check_request(KVM_REQ_PENDING_TIMER, vcpu))
update_timer_ints(vcpu);
+#if defined(CONFIG_KVM_E500V2) || defined(CONFIG_KVM_E500MC)
+ if (kvm_check_request(KVM_REQ_TLB_FLUSH, vcpu))
+ kvmppc_core_flush_tlb(vcpu);
+#endif
}
}
@@ -579,6 +583,8 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
#endif
kvm_guest_exit();
+ vcpu->mode = OUTSIDE_GUEST_MODE;
+ smp_wmb();
out:
vcpu->mode = OUTSIDE_GUEST_MODE;