powerpc/64s/exception: remove pointless EXCEPTION_PROLOG macro indirection
authorNicholas Piggin <npiggin@gmail.com>
Sat, 22 Jun 2019 13:15:34 +0000 (23:15 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 2 Jul 2019 11:38:28 +0000 (21:38 +1000)
No generated code change. Final vmlinux is changed only due to change
in bug table line numbers.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/exceptions-64s.S

index 7de4b61bde37e6a1d3353d0eabf47e846cb122bf..9b60fa040aa6fb52606cc956bf36463a146c1401 100644 (file)
@@ -326,40 +326,6 @@ END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,948)
        std     r0,GPR0(r1);            /* save r0 in stackframe        */ \
        std     r10,GPR1(r1);           /* save r1 in stackframe        */ \
 
-
-/*
- * The common exception prolog is used for all except a few exceptions
- * such as a segment miss on a kernel address.  We have to be prepared
- * to take another exception from the point where we first touch the
- * kernel stack onwards.
- *
- * On entry r13 points to the paca, r9-r13 are saved in the paca,
- * r9 contains the saved CR, r11 and r12 contain the saved SRR0 and
- * SRR1, and relocation is on.
- */
-#define EXCEPTION_PROLOG_COMMON(n, area)                                  \
-       andi.   r10,r12,MSR_PR;         /* See if coming from user      */ \
-       mr      r10,r1;                 /* Save r1                      */ \
-       subi    r1,r1,INT_FRAME_SIZE;   /* alloc frame on kernel stack  */ \
-       beq-    1f;                                                        \
-       ld      r1,PACAKSAVE(r13);      /* kernel stack to use          */ \
-1:     cmpdi   cr1,r1,-INT_FRAME_SIZE; /* check if r1 is in userspace  */ \
-       blt+    cr1,3f;                 /* abort if it is               */ \
-       li      r1,(n);                 /* will be reloaded later       */ \
-       sth     r1,PACA_TRAP_SAVE(r13);                                    \
-       std     r3,area+EX_R3(r13);                                        \
-       addi    r3,r13,area;            /* r3 -> where regs are saved*/    \
-       RESTORE_CTR(r1, area);                                             \
-       b       bad_stack;                                                 \
-3:     EXCEPTION_PROLOG_COMMON_1();                                       \
-       kuap_save_amr_and_lock r9, r10, cr1, cr0;                          \
-       beq     4f;                     /* if from kernel mode          */ \
-       ACCOUNT_CPU_USER_ENTRY(r13, r9, r10);                              \
-       SAVE_PPR(area, r9);                                                \
-4:     EXCEPTION_PROLOG_COMMON_2(area)                                    \
-       EXCEPTION_PROLOG_COMMON_3(n)                                       \
-       ACCOUNT_STOLEN_TIME
-
 /* Save original regs values from save area to stack frame. */
 #define EXCEPTION_PROLOG_COMMON_2(area)                                           \
        ld      r9,area+EX_R9(r13);     /* move r9, r10 to stackframe   */ \
@@ -379,7 +345,7 @@ END_FTR_SECTION_NESTED(CPU_FTR_CFAR, CPU_FTR_CFAR, 66);                        \
        GET_CTR(r10, area);                                                \
        std     r10,_CTR(r1);
 
-#define EXCEPTION_PROLOG_COMMON_3(n)                                      \
+#define EXCEPTION_PROLOG_COMMON_3(trap)                                           \
        std     r2,GPR2(r1);            /* save r2 in stackframe        */ \
        SAVE_4GPRS(3, r1);              /* save r3 - r6 in stackframe   */ \
        SAVE_2GPRS(7, r1);              /* save r7, r8 in stackframe    */ \
@@ -390,26 +356,45 @@ END_FTR_SECTION_NESTED(CPU_FTR_CFAR, CPU_FTR_CFAR, 66);                      \
        mfspr   r11,SPRN_XER;           /* save XER in stackframe       */ \
        std     r10,SOFTE(r1);                                             \
        std     r11,_XER(r1);                                              \
-       li      r9,(n)+1;                                                  \
+       li      r9,(trap)+1;                                               \
        std     r9,_TRAP(r1);           /* set trap number              */ \
        li      r10,0;                                                     \
        ld      r11,exception_marker@toc(r2);                              \
        std     r10,RESULT(r1);         /* clear regs->result           */ \
        std     r11,STACK_FRAME_OVERHEAD-16(r1); /* mark the frame      */
 
-#define RUNLATCH_ON                            \
-BEGIN_FTR_SECTION                              \
-       ld      r3, PACA_THREAD_INFO(r13);      \
-       ld      r4,TI_LOCAL_FLAGS(r3);          \
-       andi.   r0,r4,_TLF_RUNLATCH;            \
-       beql    ppc64_runlatch_on_trampoline;   \
-END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
+/*
+ * On entry r13 points to the paca, r9-r13 are saved in the paca,
+ * r9 contains the saved CR, r11 and r12 contain the saved SRR0 and
+ * SRR1, and relocation is on.
+ */
+#define EXCEPTION_COMMON(area, trap)                                      \
+       andi.   r10,r12,MSR_PR;         /* See if coming from user      */ \
+       mr      r10,r1;                 /* Save r1                      */ \
+       subi    r1,r1,INT_FRAME_SIZE;   /* alloc frame on kernel stack  */ \
+       beq-    1f;                                                        \
+       ld      r1,PACAKSAVE(r13);      /* kernel stack to use          */ \
+1:     cmpdi   cr1,r1,-INT_FRAME_SIZE; /* check if r1 is in userspace  */ \
+       blt+    cr1,3f;                 /* abort if it is               */ \
+       li      r1,(trap);              /* will be reloaded later       */ \
+       sth     r1,PACA_TRAP_SAVE(r13);                                    \
+       std     r3,area+EX_R3(r13);                                        \
+       addi    r3,r13,area;            /* r3 -> where regs are saved*/    \
+       RESTORE_CTR(r1, area);                                             \
+       b       bad_stack;                                                 \
+3:     EXCEPTION_PROLOG_COMMON_1();                                       \
+       kuap_save_amr_and_lock r9, r10, cr1, cr0;                          \
+       beq     4f;                     /* if from kernel mode          */ \
+       ACCOUNT_CPU_USER_ENTRY(r13, r9, r10);                              \
+       SAVE_PPR(area, r9);                                                \
+4:     EXCEPTION_PROLOG_COMMON_2(area);                                   \
+       EXCEPTION_PROLOG_COMMON_3(trap);                                   \
+       ACCOUNT_STOLEN_TIME
 
-#define EXCEPTION_COMMON(area, trap)                           \
-       EXCEPTION_PROLOG_COMMON(trap, area);                    \
 
 /*
- * Exception where stack is already set in r1, r1 is saved in r10
+ * Exception where stack is already set in r1, r1 is saved in r10.
+ * PPR save and CPU accounting is not done (for some reason).
  */
 #define EXCEPTION_COMMON_STACK(area, trap)                     \
        EXCEPTION_PROLOG_COMMON_1();                            \
@@ -417,6 +402,15 @@ END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
        EXCEPTION_PROLOG_COMMON_2(area);                        \
        EXCEPTION_PROLOG_COMMON_3(trap)
 
+
+#define RUNLATCH_ON                            \
+BEGIN_FTR_SECTION                              \
+       ld      r3, PACA_THREAD_INFO(r13);      \
+       ld      r4,TI_LOCAL_FLAGS(r3);          \
+       andi.   r0,r4,_TLF_RUNLATCH;            \
+       beql    ppc64_runlatch_on_trampoline;   \
+END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
+
 /*
  * When the idle code in power4_idle puts the CPU into NAP mode,
  * it has to do so in a loop, and relies on the external interrupt
@@ -1048,7 +1042,7 @@ EXC_COMMON_BEGIN(machine_check_common)
        std     r10,PACA_EXMC+EX_DAR(r13)
        mfspr   r10,SPRN_DSISR
        stw     r10,PACA_EXMC+EX_DSISR(r13)
-       EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC)
+       EXCEPTION_COMMON(PACA_EXMC, 0x200)
        FINISH_NAP
        RECONCILE_IRQ_STATE(r10, r11)
        ld      r3,PACA_EXMC+EX_DAR(r13)
@@ -1299,7 +1293,7 @@ EXC_COMMON_BEGIN(data_access_common)
         * r9 - r13 are saved in paca->exgen.
         * EX_DAR and EX_DSISR have saved DAR/DSISR
         */
-       EXCEPTION_PROLOG_COMMON(0x300, PACA_EXGEN)
+       EXCEPTION_COMMON(PACA_EXGEN, 0x300)
        RECONCILE_IRQ_STATE(r10, r11)
        ld      r12,_MSR(r1)
        ld      r3,PACA_EXGEN+EX_DAR(r13)
@@ -1338,7 +1332,7 @@ EXC_VIRT_END(data_access_slb, 0x4380, 0x80)
 TRAMP_KVM_SKIP(PACA_EXSLB, 0x380)
 
 EXC_COMMON_BEGIN(data_access_slb_common)
-       EXCEPTION_PROLOG_COMMON(0x380, PACA_EXSLB)
+       EXCEPTION_COMMON(PACA_EXSLB, 0x380)
        ld      r4,PACA_EXSLB+EX_DAR(r13)
        std     r4,_DAR(r1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
@@ -1368,7 +1362,7 @@ EXC_VIRT(instruction_access, 0x4400, 0x80, 0x400)
 TRAMP_KVM(PACA_EXGEN, 0x400)
 
 EXC_COMMON_BEGIN(instruction_access_common)
-       EXCEPTION_PROLOG_COMMON(0x400, PACA_EXGEN)
+       EXCEPTION_COMMON(PACA_EXGEN, 0x400)
        RECONCILE_IRQ_STATE(r10, r11)
        ld      r12,_MSR(r1)
        ld      r3,_NIP(r1)
@@ -1388,7 +1382,7 @@ __EXC_VIRT(instruction_access_slb, 0x4480, 0x80, 0x480, PACA_EXSLB)
 TRAMP_KVM(PACA_EXSLB, 0x480)
 
 EXC_COMMON_BEGIN(instruction_access_slb_common)
-       EXCEPTION_PROLOG_COMMON(0x480, PACA_EXSLB)
+       EXCEPTION_COMMON(PACA_EXSLB, 0x480)
        ld      r4,_NIP(r1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
 BEGIN_MMU_FTR_SECTION
@@ -1465,7 +1459,7 @@ EXC_VIRT_END(alignment, 0x4600, 0x100)
 
 TRAMP_KVM(PACA_EXGEN, 0x600)
 EXC_COMMON_BEGIN(alignment_common)
-       EXCEPTION_PROLOG_COMMON(0x600, PACA_EXGEN)
+       EXCEPTION_COMMON(PACA_EXGEN, 0x600)
        ld      r3,PACA_EXGEN+EX_DAR(r13)
        lwz     r4,PACA_EXGEN+EX_DSISR(r13)
        std     r3,_DAR(r1)
@@ -1503,7 +1497,7 @@ EXC_COMMON_BEGIN(program_check_common)
        ld      r1,PACAEMERGSP(r13)     /* Use emergency stack          */
        subi    r1,r1,INT_FRAME_SIZE    /* alloc stack frame            */
        b 3f                            /* Jump into the macro !!       */
-1:     EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN)
+1:     EXCEPTION_COMMON(PACA_EXGEN, 0x700)
        bl      save_nvgprs
        RECONCILE_IRQ_STATE(r10, r11)
        addi    r3,r1,STACK_FRAME_OVERHEAD
@@ -1515,7 +1509,7 @@ EXC_REAL(fp_unavailable, 0x800, 0x100)
 EXC_VIRT(fp_unavailable, 0x4800, 0x100, 0x800)
 TRAMP_KVM(PACA_EXGEN, 0x800)
 EXC_COMMON_BEGIN(fp_unavailable_common)
-       EXCEPTION_PROLOG_COMMON(0x800, PACA_EXGEN)
+       EXCEPTION_COMMON(PACA_EXGEN, 0x800)
        bne     1f                      /* if from user, just load it up */
        bl      save_nvgprs
        RECONCILE_IRQ_STATE(r10, r11)
@@ -1728,7 +1722,7 @@ EXC_COMMON_BEGIN(h_data_storage_common)
        std     r10,PACA_EXGEN+EX_DAR(r13)
        mfspr   r10,SPRN_HDSISR
        stw     r10,PACA_EXGEN+EX_DSISR(r13)
-       EXCEPTION_PROLOG_COMMON(0xe00, PACA_EXGEN)
+       EXCEPTION_COMMON(PACA_EXGEN, 0xe00)
        bl      save_nvgprs
        RECONCILE_IRQ_STATE(r10, r11)
        addi    r3,r1,STACK_FRAME_OVERHEAD
@@ -1860,7 +1854,7 @@ EXC_REAL_OOL(altivec_unavailable, 0xf20, 0x20)
 EXC_VIRT_OOL(altivec_unavailable, 0x4f20, 0x20, 0xf20)
 TRAMP_KVM(PACA_EXGEN, 0xf20)
 EXC_COMMON_BEGIN(altivec_unavailable_common)
-       EXCEPTION_PROLOG_COMMON(0xf20, PACA_EXGEN)
+       EXCEPTION_COMMON(PACA_EXGEN, 0xf20)
 #ifdef CONFIG_ALTIVEC
 BEGIN_FTR_SECTION
        beq     1f
@@ -1897,7 +1891,7 @@ EXC_REAL_OOL(vsx_unavailable, 0xf40, 0x20)
 EXC_VIRT_OOL(vsx_unavailable, 0x4f40, 0x20, 0xf40)
 TRAMP_KVM(PACA_EXGEN, 0xf40)
 EXC_COMMON_BEGIN(vsx_unavailable_common)
-       EXCEPTION_PROLOG_COMMON(0xf40, PACA_EXGEN)
+       EXCEPTION_COMMON(PACA_EXGEN, 0xf40)
 #ifdef CONFIG_VSX
 BEGIN_FTR_SECTION
        beq     1f