diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-03-13 21:52:44 +0000 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2012-04-08 14:02:39 +0300 |
commit | bbcc9c06695243ea23d30de36842df9200c33857 (patch) | |
tree | 530a126fb2f774f5b4dd2cb4a8b0d042d79a4323 /arch/powerpc/kvm/book3s.c | |
parent | 966cd0f3bdd422f0b10686fb59d0d456fbbb6398 (diff) | |
download | blackbird-op-linux-bbcc9c06695243ea23d30de36842df9200c33857.tar.gz blackbird-op-linux-bbcc9c06695243ea23d30de36842df9200c33857.zip |
powerpc/kvm: Fix magic page vs. 32-bit RTAS on ppc64
When the kernel calls into RTAS, it switches to 32-bit mode. The
magic page was is longer accessible in that case, causing the
patched instructions in the RTAS call wrapper to crash.
This fixes it by making available a 32-bit mapping of the magic
page in that case. This mapping is flushed whenever we switch
the kernel back to 64-bit mode.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
[agraf: add a check if the magic page is mapped]
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/powerpc/kvm/book3s.c')
-rw-r--r-- | arch/powerpc/kvm/book3s.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c index c8ead7b9f03b..3f2a8360c857 100644 --- a/arch/powerpc/kvm/book3s.c +++ b/arch/powerpc/kvm/book3s.c @@ -291,6 +291,9 @@ pfn_t kvmppc_gfn_to_pfn(struct kvm_vcpu *vcpu, gfn_t gfn) { ulong mp_pa = vcpu->arch.magic_page_pa; + if (!(vcpu->arch.shared->msr & MSR_SF)) + mp_pa = (uint32_t)mp_pa; + /* Magic page override */ if (unlikely(mp_pa) && unlikely(((gfn << PAGE_SHIFT) & KVM_PAM) == |