powerpc/64s/exception: Move EXCEPTION_COMMON additions into callers
authorNicholas Piggin <npiggin@gmail.com>
Sat, 22 Jun 2019 13:15:21 +0000 (23:15 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 2 Jul 2019 10:24:42 +0000 (20:24 +1000)
More cases of code insertion via macros that does not add a great
deal. All the additions have to be specified in the macro arguments,
so they can just as well go after the macro.

No generated code change.

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

index c98e274b5fbaa51961605908cd9d5f5bdf88c544..127ebd8d774617c9aa26fdcab81c000ede56a0ba 100644 (file)
@@ -640,21 +640,6 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
        EXCEPTION_PROLOG_1 EXC_HV, PACA_EXGEN, 1, vec, bitmask ;        \
        EXCEPTION_PROLOG_2_VIRT label, EXC_HV
 
-/*
- * Our exception common code can be passed various "additions"
- * to specify the behaviour of interrupts, whether to kick the
- * runlatch, etc...
- */
-
-/*
- * This addition reconciles our actual IRQ state with the various software
- * flags that track it. This may call C code.
- */
-#define ADD_RECONCILE  RECONCILE_IRQ_STATE(r10,r11)
-
-#define ADD_NVGPRS                             \
-       bl      save_nvgprs
-
 #define RUNLATCH_ON                            \
 BEGIN_FTR_SECTION                              \
        ld      r3, PACA_THREAD_INFO(r13);      \
@@ -663,25 +648,22 @@ BEGIN_FTR_SECTION                         \
        beql    ppc64_runlatch_on_trampoline;   \
 END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
 
-#define EXCEPTION_COMMON(area, trap, label, additions)         \
+#define EXCEPTION_COMMON(area, trap)                           \
        EXCEPTION_PROLOG_COMMON(trap, area);                    \
-       /* Volatile regs are potentially clobbered here */      \
-       additions
 
 /*
- * Exception where stack is already set in r1, r1 is saved in r10, and it
- * continues rather than returns.
+ * Exception where stack is already set in r1, r1 is saved in r10
  */
-#define EXCEPTION_COMMON_NORET_STACK(area, trap, label, additions) \
+#define EXCEPTION_COMMON_STACK(area, trap)                     \
        EXCEPTION_PROLOG_COMMON_1();                            \
        kuap_save_amr_and_lock r9, r10, cr1;                    \
        EXCEPTION_PROLOG_COMMON_2(area);                        \
-       EXCEPTION_PROLOG_COMMON_3(trap);                        \
-       /* Volatile regs are potentially clobbered here */      \
-       additions
+       EXCEPTION_PROLOG_COMMON_3(trap)
 
-#define STD_EXCEPTION_COMMON(trap, label, hdlr)                        \
-       EXCEPTION_COMMON(PACA_EXGEN, trap, label, ADD_NVGPRS;ADD_RECONCILE); \
+#define STD_EXCEPTION_COMMON(trap, hdlr)                       \
+       EXCEPTION_COMMON(PACA_EXGEN, trap);                     \
+       bl      save_nvgprs;                                    \
+       RECONCILE_IRQ_STATE(r10, r11);                          \
        addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
        bl      hdlr;                                           \
        b       ret_from_except
@@ -691,9 +673,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
  * in the idle task and therefore need the special idle handling
  * (finish nap and runlatch)
  */
-#define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr)          \
-       EXCEPTION_COMMON(PACA_EXGEN, trap, label,               \
-               FINISH_NAP;ADD_RECONCILE;RUNLATCH_ON);          \
+#define STD_EXCEPTION_COMMON_ASYNC(trap, hdlr)                 \
+       EXCEPTION_COMMON(PACA_EXGEN, trap);                     \
+       FINISH_NAP;                                             \
+       RECONCILE_IRQ_STATE(r10, r11);                          \
+       RUNLATCH_ON;                                            \
        addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
        bl      hdlr;                                           \
        b       ret_from_except_lite
index bdd67a26e9593d2a8369a01b7d2ac889791e7b76..acd94fcf9f4002373cdb3c0da5210ad355086b73 100644 (file)
@@ -403,11 +403,11 @@ name:
 
 #define EXC_COMMON(name, realvec, hdlr)                                        \
        EXC_COMMON_BEGIN(name);                                         \
-       STD_EXCEPTION_COMMON(realvec, name, hdlr)
+       STD_EXCEPTION_COMMON(realvec, hdlr)
 
 #define EXC_COMMON_ASYNC(name, realvec, hdlr)                          \
        EXC_COMMON_BEGIN(name);                                         \
-       STD_EXCEPTION_COMMON_ASYNC(realvec, name, hdlr)
+       STD_EXCEPTION_COMMON_ASYNC(realvec, hdlr)
 
 #endif /* __ASSEMBLY__ */
 
index 7cf0e38875c3331a9c5f92980ca32df8b1a1b102..2685c81e28f23056285f3534fe54e220fa0998f8 100644 (file)
@@ -164,21 +164,6 @@ EXC_COMMON_BEGIN(system_reset_idle_common)
        b       idle_return_gpr_loss
 #endif
 
-/*
- * Set IRQS_ALL_DISABLED unconditionally so arch_irqs_disabled does
- * the right thing. We do not want to reconcile because that goes
- * through irq tracing which we don't want in NMI.
- *
- * Save PACAIRQHAPPENED because some code will do a hard disable
- * (e.g., xmon). So we want to restore this back to where it was
- * when we return. DAR is unused in the stack, so save it there.
- */
-#define ADD_RECONCILE_NMI                                              \
-       li      r10,IRQS_ALL_DISABLED;                                  \
-       stb     r10,PACAIRQSOFTMASK(r13);                               \
-       lbz     r10,PACAIRQHAPPENED(r13);                               \
-       std     r10,_DAR(r1)
-
 EXC_COMMON_BEGIN(system_reset_common)
        /*
         * Increment paca->in_nmi then enable MSR_RI. SLB or MCE will be able
@@ -195,8 +180,22 @@ EXC_COMMON_BEGIN(system_reset_common)
        mr      r10,r1
        ld      r1,PACA_NMI_EMERG_SP(r13)
        subi    r1,r1,INT_FRAME_SIZE
-       EXCEPTION_COMMON_NORET_STACK(PACA_EXNMI, 0x100, system_reset,
-                                       ADD_NVGPRS;ADD_RECONCILE_NMI)
+       EXCEPTION_COMMON_STACK(PACA_EXNMI, 0x100)
+       bl      save_nvgprs
+       /*
+        * Set IRQS_ALL_DISABLED unconditionally so arch_irqs_disabled does
+        * the right thing. We do not want to reconcile because that goes
+        * through irq tracing which we don't want in NMI.
+        *
+        * Save PACAIRQHAPPENED because some code will do a hard disable
+        * (e.g., xmon). So we want to restore this back to where it was
+        * when we return. DAR is unused in the stack, so save it there.
+        */
+       li      r10,IRQS_ALL_DISABLED
+       stb     r10,PACAIRQSOFTMASK(r13)
+       lbz     r10,PACAIRQHAPPENED(r13)
+       std     r10,_DAR(r1)
+
        addi    r3,r1,STACK_FRAME_OVERHEAD
        bl      system_reset_exception
 
@@ -1172,8 +1171,11 @@ hmi_exception_after_realmode:
        b       tramp_real_hmi_exception
 
 EXC_COMMON_BEGIN(hmi_exception_common)
-EXCEPTION_COMMON(PACA_EXGEN, 0xe60, hmi_exception_common,
-                       FINISH_NAP;ADD_NVGPRS;ADD_RECONCILE;RUNLATCH_ON)
+       EXCEPTION_COMMON(PACA_EXGEN, 0xe60)
+       FINISH_NAP
+       bl      save_nvgprs
+       RECONCILE_IRQ_STATE(r10, r11)
+       RUNLATCH_ON
        addi    r3,r1,STACK_FRAME_OVERHEAD
        bl      handle_hmi_exception
        b       ret_from_except
@@ -1471,8 +1473,9 @@ EXC_COMMON_BEGIN(soft_nmi_common)
        mr      r10,r1
        ld      r1,PACAEMERGSP(r13)
        subi    r1,r1,INT_FRAME_SIZE
-       EXCEPTION_COMMON_NORET_STACK(PACA_EXGEN, 0x900, system_reset,
-                                       ADD_NVGPRS;ADD_RECONCILE)
+       EXCEPTION_COMMON_STACK(PACA_EXGEN, 0x900)
+       bl      save_nvgprs
+       RECONCILE_IRQ_STATE(r10, r11)
        addi    r3,r1,STACK_FRAME_OVERHEAD
        bl      soft_nmi_interrupt
        b       ret_from_except