powerpc/64s/exception: Move EXCEPTION_COMMON handler and return branches into callers
authorNicholas Piggin <npiggin@gmail.com>
Sat, 22 Jun 2019 13:15:20 +0000 (23:15 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 2 Jul 2019 10:24:42 +0000 (20:24 +1000)
The aim is to reduce the amount of indirection it takes to get through
the exception handler macros, particularly where it provides little
code sharing.

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/kernel/exceptions-64s.S

index 663998e..c98e274 100644 (file)
@@ -663,31 +663,28 @@ BEGIN_FTR_SECTION                         \
        beql    ppc64_runlatch_on_trampoline;   \
 END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
 
-#define EXCEPTION_COMMON(area, trap, label, hdlr, ret, additions) \
+#define EXCEPTION_COMMON(area, trap, label, additions)         \
        EXCEPTION_PROLOG_COMMON(trap, area);                    \
        /* Volatile regs are potentially clobbered here */      \
-       additions;                                              \
-       addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
-       bl      hdlr;                                           \
-       b       ret
+       additions
 
 /*
  * Exception where stack is already set in r1, r1 is saved in r10, and it
  * continues rather than returns.
  */
-#define EXCEPTION_COMMON_NORET_STACK(area, trap, label, hdlr, additions) \
+#define EXCEPTION_COMMON_NORET_STACK(area, trap, label, additions) \
        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;                                              \
-       addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
-       bl      hdlr
+       additions
 
 #define STD_EXCEPTION_COMMON(trap, label, hdlr)                        \
-       EXCEPTION_COMMON(PACA_EXGEN, trap, label, hdlr,         \
-               ret_from_except, ADD_NVGPRS;ADD_RECONCILE)
+       EXCEPTION_COMMON(PACA_EXGEN, trap, label, ADD_NVGPRS;ADD_RECONCILE); \
+       addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
+       bl      hdlr;                                           \
+       b       ret_from_except
 
 /*
  * Like STD_EXCEPTION_COMMON, but for exceptions that can occur
@@ -695,8 +692,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
  * (finish nap and runlatch)
  */
 #define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr)          \
-       EXCEPTION_COMMON(PACA_EXGEN, trap, label, hdlr,         \
-               ret_from_except_lite, FINISH_NAP;ADD_RECONCILE;RUNLATCH_ON)
+       EXCEPTION_COMMON(PACA_EXGEN, trap, label,               \
+               FINISH_NAP;ADD_RECONCILE;RUNLATCH_ON);          \
+       addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
+       bl      hdlr;                                           \
+       b       ret_from_except_lite
 
 /*
  * When the idle code in power4_idle puts the CPU into NAP mode,
index 99541f7..7cf0e38 100644 (file)
@@ -195,9 +195,10 @@ 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, system_reset_exception,
-                       ADD_NVGPRS;ADD_RECONCILE_NMI)
+       EXCEPTION_COMMON_NORET_STACK(PACA_EXNMI, 0x100, system_reset,
+                                       ADD_NVGPRS;ADD_RECONCILE_NMI)
+       addi    r3,r1,STACK_FRAME_OVERHEAD
+       bl      system_reset_exception
 
        /* This (and MCE) can be simplified with mtmsrd L=1 */
        /* Clear MSR_RI before setting SRR0 and SRR1. */
@@ -1171,8 +1172,11 @@ hmi_exception_after_realmode:
        b       tramp_real_hmi_exception
 
 EXC_COMMON_BEGIN(hmi_exception_common)
-EXCEPTION_COMMON(PACA_EXGEN, 0xe60, hmi_exception_common, handle_hmi_exception,
-        ret_from_except, FINISH_NAP;ADD_NVGPRS;ADD_RECONCILE;RUNLATCH_ON)
+EXCEPTION_COMMON(PACA_EXGEN, 0xe60, hmi_exception_common,
+                       FINISH_NAP;ADD_NVGPRS;ADD_RECONCILE;RUNLATCH_ON)
+       addi    r3,r1,STACK_FRAME_OVERHEAD
+       bl      handle_hmi_exception
+       b       ret_from_except
 
 EXC_REAL_OOL_MASKABLE_HV(h_doorbell, 0xe80, 0x20, IRQS_DISABLED)
 EXC_VIRT_OOL_MASKABLE_HV(h_doorbell, 0x4e80, 0x20, 0xe80, IRQS_DISABLED)
@@ -1467,9 +1471,10 @@ 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, soft_nmi_interrupt,
-                       ADD_NVGPRS;ADD_RECONCILE)
+       EXCEPTION_COMMON_NORET_STACK(PACA_EXGEN, 0x900, system_reset,
+                                       ADD_NVGPRS;ADD_RECONCILE)
+       addi    r3,r1,STACK_FRAME_OVERHEAD
+       bl      soft_nmi_interrupt
        b       ret_from_except
 
 #else /* CONFIG_PPC_WATCHDOG */