aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kvm/book3s.c
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2010-08-02 10:08:22 -0400
committerAvi Kivity <avi@redhat.com>2010-10-24 04:52:05 -0400
commit4cb6b7ea0cd085e6613153ad69608cad6421abcc (patch)
tree79c5eae68895c2ac75e09846f44782dd347a0cdd /arch/powerpc/kvm/book3s.c
parentc60b4cf70127941e2f944a7971a7f6b3ecb367ac (diff)
KVM: PPC: Preload magic page when in kernel mode
When the guest jumps into kernel mode and has the magic page mapped, theres a very high chance that it will also use it. So let's detect that scenario and map the segment accordingly. Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc/kvm/book3s.c')
-rw-r--r--arch/powerpc/kvm/book3s.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
index 37db61d37041..54ca578239db 100644
--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -145,6 +145,16 @@ void kvmppc_set_msr(struct kvm_vcpu *vcpu, u64 msr)
145 (old_msr & (MSR_PR|MSR_IR|MSR_DR))) { 145 (old_msr & (MSR_PR|MSR_IR|MSR_DR))) {
146 kvmppc_mmu_flush_segments(vcpu); 146 kvmppc_mmu_flush_segments(vcpu);
147 kvmppc_mmu_map_segment(vcpu, kvmppc_get_pc(vcpu)); 147 kvmppc_mmu_map_segment(vcpu, kvmppc_get_pc(vcpu));
148
149 /* Preload magic page segment when in kernel mode */
150 if (!(msr & MSR_PR) && vcpu->arch.magic_page_pa) {
151 struct kvm_vcpu_arch *a = &vcpu->arch;
152
153 if (msr & MSR_DR)
154 kvmppc_mmu_map_segment(vcpu, a->magic_page_ea);
155 else
156 kvmppc_mmu_map_segment(vcpu, a->magic_page_pa);
157 }
148 } 158 }
149 159
150 /* Preload FPU if it's enabled */ 160 /* Preload FPU if it's enabled */