powerpc/64s/exception: merge KVM handler and skip variants
authorNicholas Piggin <npiggin@gmail.com>
Sat, 22 Jun 2019 13:15:17 +0000 (23:15 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 2 Jul 2019 10:24:42 +0000 (20:24 +1000)
Conditionally expand the skip case if it is specified.

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 4111888e04d71683549037e8bae597dea31d2c69..d2a5bbeb727d7a730a1488235b925c9584b6c74e 100644 (file)
@@ -436,26 +436,17 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
        .endif
 .endm
 
-.macro KVM_HANDLER area, hsrr, n
+.macro KVM_HANDLER area, hsrr, n, skip
+       .if \skip
+       cmpwi   r10,KVM_GUEST_MODE_SKIP
+       beq     89f
+       .else
        BEGIN_FTR_SECTION_NESTED(947)
        ld      r10,\area+EX_CFAR(r13)
        std     r10,HSTATE_CFAR(r13)
        END_FTR_SECTION_NESTED(CPU_FTR_CFAR,CPU_FTR_CFAR,947)
-       BEGIN_FTR_SECTION_NESTED(948)
-       ld      r10,\area+EX_PPR(r13)
-       std     r10,HSTATE_PPR(r13)
-       END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,948)
-       ld      r10,\area+EX_R10(r13)
-       std     r12,HSTATE_SCRATCH0(r13)
-       sldi    r12,r9,32
-       ori     r12,r12,(\n)
-       /* This reloads r9 before branching to kvmppc_interrupt */
-       __BRANCH_TO_KVM_EXIT(\area, kvmppc_interrupt)
-.endm
+       .endif
 
-.macro KVM_HANDLER_SKIP area, hsrr, n
-       cmpwi   r10,KVM_GUEST_MODE_SKIP
-       beq     89f
        BEGIN_FTR_SECTION_NESTED(948)
        ld      r10,\area+EX_PPR(r13)
        std     r10,HSTATE_PPR(r13)
@@ -466,6 +457,8 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
        ori     r12,r12,(\n)
        /* This reloads r9 before branching to kvmppc_interrupt */
        __BRANCH_TO_KVM_EXIT(\area, kvmppc_interrupt)
+
+       .if \skip
 89:    mtocrf  0x80,r9
        ld      r9,\area+EX_R9(r13)
        ld      r10,\area+EX_R10(r13)
@@ -474,14 +467,13 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)
        .else
        b       kvmppc_skip_interrupt
        .endif
+       .endif
 .endm
 
 #else
 .macro KVMTEST hsrr, n
 .endm
-.macro KVM_HANDLER area, hsrr, n
-.endm
-.macro KVM_HANDLER_SKIP area, hsrr, n
+.macro KVM_HANDLER area, hsrr, n, skip
 .endm
 #endif
 
index 4767d6c7b8faf17d0f85290f2639a662fd1b942f..518d9758b41e5d6940524a36debdfbd947847a0b 100644 (file)
@@ -387,22 +387,22 @@ name:
 
 #define TRAMP_KVM(area, n)                                             \
        TRAMP_KVM_BEGIN(do_kvm_##n);                                    \
-       KVM_HANDLER area, EXC_STD, n
+       KVM_HANDLER area, EXC_STD, n, 0
 
 #define TRAMP_KVM_SKIP(area, n)                                                \
        TRAMP_KVM_BEGIN(do_kvm_##n);                                    \
-       KVM_HANDLER_SKIP area, EXC_STD, n
+       KVM_HANDLER area, EXC_STD, n, 1
 
 /*
  * HV variant exceptions get the 0x2 bit added to their trap number.
  */
 #define TRAMP_KVM_HV(area, n)                                          \
        TRAMP_KVM_BEGIN(do_kvm_H##n);                                   \
-       KVM_HANDLER area, EXC_HV, n + 0x2
+       KVM_HANDLER area, EXC_HV, n + 0x2, 0
 
 #define TRAMP_KVM_HV_SKIP(area, n)                                     \
        TRAMP_KVM_BEGIN(do_kvm_H##n);                                   \
-       KVM_HANDLER_SKIP area, EXC_HV, n + 0x2
+       KVM_HANDLER area, EXC_HV, n + 0x2, 1
 
 #define EXC_COMMON(name, realvec, hdlr)                                        \
        EXC_COMMON_BEGIN(name);                                         \
index cc356a31d5cc0af92e1d5b573630deb688369fa9..d30f2b5fd206df0b0940d90ece0fbe9f903850fc 100644 (file)
@@ -1063,7 +1063,7 @@ TRAMP_KVM_BEGIN(do_kvm_0xc00)
        SET_SCRATCH0(r10)
        std     r9,PACA_EXGEN+EX_R9(r13)
        mfcr    r9
-       KVM_HANDLER PACA_EXGEN, EXC_STD, 0xc00
+       KVM_HANDLER PACA_EXGEN, EXC_STD, 0xc00, 0
 #endif