qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-ppc] [RFC PATCH 10/17] PowerPC: booke64: Refactor exception pr


From: Benjamin Herrenschmidt
Subject: Re: [Qemu-ppc] [RFC PATCH 10/17] PowerPC: booke64: Refactor exception prolog for save/restore regs
Date: Wed, 27 Jun 2012 08:12:46 +1000

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 <address@hidden>
> ---
>  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.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]