KVM: PPC: Simplify kvmppc_load_up_(FPU|VMX|VSX)
authorAlexander Graf <agraf@suse.de>
Fri, 19 Feb 2010 10:00:47 +0000 (11:00 +0100)
committerAvi Kivity <avi@redhat.com>
Sun, 25 Apr 2010 09:38:01 +0000 (12:38 +0300)
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>
arch/powerpc/kvm/book3s_64_rmhandlers.S

index c83c60a..bd08535 100644 (file)
@@ -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)