[RFC PATCH 10/17] PowerPC: booke64: Refactor exception prolog for save/restore regs
Benjamin Herrenschmidt
benh at kernel.crashing.org
Wed Jun 27 08:12:46 EST 2012
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.
Cheers,
Ben.
More information about the Linuxppc-dev
mailing list