diff options
author | Alexander Graf <agraf@suse.de> | 2010-02-19 11:00:47 +0100 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-04-25 12:38:01 +0300 |
commit | 964b6411af10fbddc827fdd3887c49f7f5d2bfd3 (patch) | |
tree | 7ee44e0ab94cb66d2dfc7c5ab478c5a717f95d65 /arch/powerpc | |
parent | 20a340abd3f7a1ca4d11502ec71d52b4f414326e (diff) | |
download | kernel_samsung_smdk4412-964b6411af10fbddc827fdd3887c49f7f5d2bfd3.zip kernel_samsung_smdk4412-964b6411af10fbddc827fdd3887c49f7f5d2bfd3.tar.gz kernel_samsung_smdk4412-964b6411af10fbddc827fdd3887c49f7f5d2bfd3.tar.bz2 |
KVM: PPC: Simplify kvmppc_load_up_(FPU|VMX|VSX)
We don't need as complex code. I had some thinkos while writing it, figuring
I needed to support PPC32 paths on PPC64 which would have required DR=0, but
everything just runs fine with DR=1.
So let's make the functions simple C call wrappers that reserve some space on
the stack for the respective functions to clobber.
Fixes out-of-RMA-access (and thus guest FPU loading) on the PS3.
Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/kvm/book3s_64_rmhandlers.S | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/arch/powerpc/kvm/book3s_64_rmhandlers.S b/arch/powerpc/kvm/book3s_64_rmhandlers.S index c83c60a..bd08535 100644 --- a/arch/powerpc/kvm/book3s_64_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_64_rmhandlers.S @@ -164,24 +164,15 @@ _GLOBAL(kvmppc_rmcall) #define define_load_up(what) \ \ _GLOBAL(kvmppc_load_up_ ## what); \ - subi r1, r1, INT_FRAME_SIZE; \ + stdu r1, -INT_FRAME_SIZE(r1); \ mflr r3; \ std r3, _LINK(r1); \ - mfmsr r4; \ - std r31, GPR3(r1); \ - mr r31, r4; \ - li r5, MSR_DR; \ - oris r5, r5, MSR_EE@h; \ - andc r4, r4, r5; \ - mtmsr r4; \ \ bl .load_up_ ## what; \ \ - mtmsr r31; \ ld r3, _LINK(r1); \ - ld r31, GPR3(r1); \ - addi r1, r1, INT_FRAME_SIZE; \ mtlr r3; \ + addi r1, r1, INT_FRAME_SIZE; \ blr define_load_up(fpu) |