mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 21:54:11 +08:00
powerpc/40x: Change CRITICAL_EXCEPTION_PROLOG macro to a gas macro
Change CRITICAL_EXCEPTION_PROLOG macro to a gas macro to remove the ugly ; and \ on each line. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/73291fb9dc9ec58182c27a40dfc3db204e3f4024.1615552866.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
52ae92cc29
commit
9d3c18a11a
@ -100,42 +100,43 @@ _ENTRY(saved_ksp_limit)
|
||||
* Instead we use a couple of words of memory at low physical addresses.
|
||||
* This is OK since we don't support SMP on these processors.
|
||||
*/
|
||||
#define CRITICAL_EXCEPTION_PROLOG \
|
||||
stw r10,crit_r10@l(0); /* save two registers to work with */\
|
||||
stw r11,crit_r11@l(0); \
|
||||
mfcr r10; /* save CR in r10 for now */\
|
||||
mfspr r11,SPRN_SRR3; /* check whether user or kernel */\
|
||||
andi. r11,r11,MSR_PR; \
|
||||
lis r11,critirq_ctx@ha; \
|
||||
tophys(r11,r11); \
|
||||
lwz r11,critirq_ctx@l(r11); \
|
||||
beq 1f; \
|
||||
/* COMING FROM USER MODE */ \
|
||||
mfspr r11,SPRN_SPRG_THREAD; /* if from user, start at top of */\
|
||||
lwz r11,TASK_STACK-THREAD(r11); /* this thread's kernel stack */\
|
||||
1: addi r11,r11,THREAD_SIZE-INT_FRAME_SIZE; /* Alloc an excpt frm */\
|
||||
tophys(r11,r11); \
|
||||
stw r10,_CCR(r11); /* save various registers */\
|
||||
stw r12,GPR12(r11); \
|
||||
stw r9,GPR9(r11); \
|
||||
mflr r10; \
|
||||
stw r10,_LINK(r11); \
|
||||
mfspr r12,SPRN_DEAR; /* save DEAR and ESR in the frame */\
|
||||
stw r12,_DEAR(r11); /* since they may have had stuff */\
|
||||
mfspr r9,SPRN_ESR; /* in them at the point where the */\
|
||||
stw r9,_ESR(r11); /* exception was taken */\
|
||||
mfspr r12,SPRN_SRR2; \
|
||||
stw r1,GPR1(r11); \
|
||||
mfspr r9,SPRN_SRR3; \
|
||||
stw r1,0(r11); \
|
||||
tovirt(r1,r11); \
|
||||
rlwinm r9,r9,0,14,12; /* clear MSR_WE (necessary?) */\
|
||||
stw r0,GPR0(r11); \
|
||||
lis r10, STACK_FRAME_REGS_MARKER@ha; /* exception frame marker */\
|
||||
addi r10, r10, STACK_FRAME_REGS_MARKER@l; \
|
||||
stw r10, 8(r11); \
|
||||
SAVE_4GPRS(3, r11); \
|
||||
.macro CRITICAL_EXCEPTION_PROLOG
|
||||
stw r10,crit_r10@l(0) /* save two registers to work with */
|
||||
stw r11,crit_r11@l(0)
|
||||
mfcr r10 /* save CR in r10 for now */
|
||||
mfspr r11,SPRN_SRR3 /* check whether user or kernel */
|
||||
andi. r11,r11,MSR_PR
|
||||
lis r11,critirq_ctx@ha
|
||||
tophys(r11,r11)
|
||||
lwz r11,critirq_ctx@l(r11)
|
||||
beq 1f
|
||||
/* COMING FROM USER MODE */
|
||||
mfspr r11,SPRN_SPRG_THREAD /* if from user, start at top of */
|
||||
lwz r11,TASK_STACK-THREAD(r11) /* this thread's kernel stack */
|
||||
1: addi r11,r11,THREAD_SIZE-INT_FRAME_SIZE /* Alloc an excpt frm */
|
||||
tophys(r11,r11)
|
||||
stw r10,_CCR(r11) /* save various registers */
|
||||
stw r12,GPR12(r11)
|
||||
stw r9,GPR9(r11)
|
||||
mflr r10
|
||||
stw r10,_LINK(r11)
|
||||
mfspr r12,SPRN_DEAR /* save DEAR and ESR in the frame */
|
||||
stw r12,_DEAR(r11) /* since they may have had stuff */
|
||||
mfspr r9,SPRN_ESR /* in them at the point where the */
|
||||
stw r9,_ESR(r11) /* exception was taken */
|
||||
mfspr r12,SPRN_SRR2
|
||||
stw r1,GPR1(r11)
|
||||
mfspr r9,SPRN_SRR3
|
||||
stw r1,0(r11)
|
||||
tovirt(r1,r11)
|
||||
rlwinm r9,r9,0,14,12 /* clear MSR_WE (necessary?) */
|
||||
stw r0,GPR0(r11)
|
||||
lis r10, STACK_FRAME_REGS_MARKER@ha /* exception frame marker */
|
||||
addi r10, r10, STACK_FRAME_REGS_MARKER@l
|
||||
stw r10, 8(r11)
|
||||
SAVE_4GPRS(3, r11)
|
||||
SAVE_2GPRS(7, r11)
|
||||
.endm
|
||||
|
||||
/*
|
||||
* State at this point:
|
||||
|
Loading…
Reference in New Issue
Block a user