Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -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)