Commit 964b6411 authored by Alexander Graf's avatar Alexander Graf Committed by Avi Kivity

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: default avatarAlexander Graf <agraf@suse.de>
Signed-off-by: default avatarAvi Kivity <avi@redhat.com>
parent 20a340ab
...@@ -164,24 +164,15 @@ _GLOBAL(kvmppc_rmcall) ...@@ -164,24 +164,15 @@ _GLOBAL(kvmppc_rmcall)
#define define_load_up(what) \ #define define_load_up(what) \
\ \
_GLOBAL(kvmppc_load_up_ ## what); \ _GLOBAL(kvmppc_load_up_ ## what); \
subi r1, r1, INT_FRAME_SIZE; \ stdu r1, -INT_FRAME_SIZE(r1); \
mflr r3; \ mflr r3; \
std r3, _LINK(r1); \ 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; \ bl .load_up_ ## what; \
\ \
mtmsr r31; \
ld r3, _LINK(r1); \ ld r3, _LINK(r1); \
ld r31, GPR3(r1); \
addi r1, r1, INT_FRAME_SIZE; \
mtlr r3; \ mtlr r3; \
addi r1, r1, INT_FRAME_SIZE; \
blr blr
define_load_up(fpu) define_load_up(fpu)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment