[RFC PATCH 10/17] PowerPC: booke64: Refactor exception prolog for save/restore regs

Caraman Mihai Claudiu-B02008 B02008 at freescale.com
Wed Jun 27 21:49:00 EST 2012


> -----Original Message-----
> From: Benjamin Herrenschmidt [mailto:benh at kernel.crashing.org]
> Sent: Wednesday, June 27, 2012 1:13 AM
> To: Caraman Mihai Claudiu-B02008
> Cc: kvm-ppc at vger.kernel.org; kvm at vger.kernel.org; linuxppc-
> dev at lists.ozlabs.org; qemu-ppc at nongnu.org
> Subject: Re: [RFC PATCH 10/17] PowerPC: booke64: Refactor exception
> prolog for save/restore regs
> 
> On Mon, 2012-06-25 at 15:26 +0300, Mihai Caraman wrote:
> > Refactor exception prolog to allow save/restore register parameters.
> > Add addition none definition for exception prolog usage.
> > This is needed for exceptions like Guest Doorbell that use GSRRx
> > regsiters which do not map on exception type.
> >
> > Signed-off-by: Mihai Caraman <mihai.caraman at freescale.com>
> > ---
> >  arch/powerpc/kernel/exceptions-64e.S |   23 ++++++++---------------
> >  1 files changed, 8 insertions(+), 15 deletions(-)
> >
> > diff --git a/arch/powerpc/kernel/exceptions-64e.S
> > b/arch/powerpc/kernel/exceptions-64e.S
> > index 7215cc2..52aa96b 100644
> > --- a/arch/powerpc/kernel/exceptions-64e.S
> > +++ b/arch/powerpc/kernel/exceptions-64e.S
> > @@ -35,7 +35,7 @@
> >  #define	SPECIAL_EXC_FRAME_SIZE	INT_FRAME_SIZE
> >
> >  /* Exception prolog code for all exceptions */
> > -#define EXCEPTION_PROLOG(n, type, addition)				    \
> > +#define EXCEPTION_PROLOG(n, type, srr0, srr1, addition)
> \
> >  	mtspr	SPRN_SPRG_##type##_SCRATCH,r13;	/* get spare registers */
> \
> >  	mfspr	r13,SPRN_SPRG_PACA;	/* get PACA */			    \
> >  	std	r10,PACA_EX##type+EX_R10(r13);				    \
> > @@ -44,54 +44,47 @@
> >  	addition;			/* additional code for that exc. */ \
> >  	std	r1,PACA_EX##type+EX_R1(r13); /* save old r1 in the PACA */  \
> >  	stw	r10,PACA_EX##type+EX_CR(r13); /* save old CR in the PACA */ \
> > -	mfspr	r11,SPRN_##type##_SRR1;/* what are we coming from */	    \
> > +	mfspr	r11,srr1;/* what are we coming from */	    		    \
> >  	type##_SET_KSTACK;		/* get special stack if necessary */\
> >  	andi.	r10,r11,MSR_PR;		/* save stack pointer */	    \
> >  	beq	1f;			/* branch around if supervisor */   \
> >  	ld	r1,PACAKSAVE(r13);	/* get kernel stack coming from usr
> */\
> >  1:	cmpdi	cr1,r1,0;		/* check if SP makes sense */	    \
> >  	bge-	cr1,exc_##n##_bad_stack;/* bad stack (TODO: out of line) */ \
> > -	mfspr	r10,SPRN_##type##_SRR0;	/* read SRR0 before touching stack */
> > +	mfspr	r10,srr0;		/* read SRR0 before touching stack */
> 
> No, use the existing macro, use a ##type## specific to guest doorbells,
> with appropriate definitions of the corresponding SPRN_ macros.

I assume that specific PACA_EX, SCRATCH and SET_KSTACK definitions will
fallback to GEN.

Cheers,
Mike


More information about the Linuxppc-dev mailing list