It is clever, but the small code saving is not worth the spaghetti of
jumping to a label in an expanded macro, particularly when the label
is just a number rather than a descriptive name.

So expand the INT_COMMON macro twice, once for the stack and no stack
cases, and branch to those. The slight code size increase is worth
the improved clarity of branches for this non-performance critical
code.

Signed-off-by: Nicholas Piggin <npig...@gmail.com>
---
 arch/powerpc/kernel/exceptions-64s.S | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S 
b/arch/powerpc/kernel/exceptions-64s.S
index 5532923a9aac..3ebb39a4b9fa 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -533,11 +533,10 @@ 
END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,948)
        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
+       beq-    100f
        ld      r1,PACAKSAVE(r13)       /* kernel stack to use          */
-1:     tdgei   r1,-INT_FRAME_SIZE      /* trap if r1 is in userspace   */
-       EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,0
-3:
+100:   tdgei   r1,-INT_FRAME_SIZE      /* trap if r1 is in userspace   */
+       EMIT_BUG_ENTRY 100b,__FILE__,__LINE__,0
        .endif
 
        std     r9,_CCR(r1)             /* save CR in stackframe        */
@@ -551,10 +550,10 @@ 
END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,948)
        .if \kaup
        kuap_save_amr_and_lock r9, r10, cr1, cr0
        .endif
-       beq     4f                      /* if from kernel mode          */
+       beq     101f                    /* if from kernel mode          */
        ACCOUNT_CPU_USER_ENTRY(r13, r9, r10)
        SAVE_PPR(\area, r9)
-4:
+101:
        .else
        .if \kaup
        kuap_save_amr_and_lock r9, r10, cr1
@@ -1325,9 +1324,11 @@ EXC_COMMON_BEGIN(program_check_common)
        mr      r10,r1                  /* Save r1                      */
        ld      r1,PACAEMERGSP(r13)     /* Use emergency stack          */
        subi    r1,r1,INT_FRAME_SIZE    /* alloc stack frame            */
-       b 3f                            /* Jump into the macro !!       */
+       INT_COMMON 0x700, PACA_EXGEN, 0, 1, 1, 0, 0
+       b 3f
 2:
        INT_COMMON 0x700, PACA_EXGEN, 1, 1, 1, 0, 0
+3:
        bl      save_nvgprs
        addi    r3,r1,STACK_FRAME_OVERHEAD
        bl      program_check_exception
-- 
2.22.0

Reply via email to