]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
s390: open code SWITCH_KERNEL macro
authorSven Schnelle <svens@linux.ibm.com>
Thu, 28 Jan 2021 12:06:05 +0000 (13:06 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Sat, 13 Feb 2021 16:17:53 +0000 (17:17 +0100)
This is a preparation patch for two later bugfixes. In the past both
int_handler and machine check handler used SWITCH_KERNEL to switch to
the kernel stack. However, SWITCH_KERNEL doesn't work properly in machine
check context. So instead of adding more complexity to this macro, just
remove it.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Cc: <stable@kernel.org> # v5.8+
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/kernel/entry.S

index 9b3aea98f886cbb5a2803ff3649f3d1b9ea6a364..ed5acf95235fadce26b209da4fea997785ca06c8 100644 (file)
@@ -81,32 +81,6 @@ _LPP_OFFSET  = __LC_LPP
 #endif
        .endm
 
-       .macro  SWITCH_KERNEL savearea
-       tmhh    %r8,0x0001              # interrupting from user ?
-       jnz     1f
-#if IS_ENABLED(CONFIG_KVM)
-       lgr     %r14,%r9
-       larl    %r13,.Lsie_gmap
-       slgr    %r14,%r13
-       lghi    %r13,.Lsie_done - .Lsie_gmap
-       clgr    %r14,%r13
-       jhe     0f
-       lghi    %r11,\savearea          # inside critical section, do cleanup
-       brasl   %r14,.Lcleanup_sie
-#endif
-0:     CHECK_STACK \savearea
-       lgr     %r11,%r15
-       aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
-       stg     %r11,__SF_BACKCHAIN(%r15)
-       j       2f
-1:     BPENTER __TI_flags(%r12),_TIF_ISOLATE_BP
-       lctlg   %c1,%c1,__LC_KERNEL_ASCE
-       lg      %r15,__LC_KERNEL_STACK
-       xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
-2:     la      %r11,STACK_FRAME_OVERHEAD(%r15)
-       .endm
-
-       # Use STORE CLOCK by default, switch to STORE CLOCK FAST if available.
        .macro STCK savearea
        ALTERNATIVE ".insn      s,0xb2050000,\savearea", \
                    ".insn      s,0xb27c0000,\savearea", 25
@@ -413,7 +387,28 @@ ENTRY(\name)
        stmg    %r8,%r15,__LC_SAVE_AREA_ASYNC
        lg      %r12,__LC_CURRENT
        lmg     %r8,%r9,\lc_old_psw
-       SWITCH_KERNEL __LC_SAVE_AREA_ASYNC
+       tmhh    %r8,0x0001                      # interrupting from user ?
+       jnz     1f
+#if IS_ENABLED(CONFIG_KVM)
+       lgr     %r14,%r9
+       larl    %r13,.Lsie_gmap
+       slgr    %r14,%r13
+       lghi    %r13,.Lsie_done - .Lsie_gmap
+       clgr    %r14,%r13
+       jhe     0f
+       lghi    %r11,__LC_SAVE_AREA_ASYNC       # inside critical section, do cleanup
+       brasl   %r14,.Lcleanup_sie
+#endif
+0:     CHECK_STACK __LC_SAVE_AREA_ASYNC
+       lgr     %r11,%r15
+       aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
+       stg     %r11,__SF_BACKCHAIN(%r15)
+       j       2f
+1:     BPENTER __TI_flags(%r12),_TIF_ISOLATE_BP
+       lctlg   %c1,%c1,__LC_KERNEL_ASCE
+       lg      %r15,__LC_KERNEL_STACK
+       xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
+2:     la      %r11,STACK_FRAME_OVERHEAD(%r15)
        stmg    %r0,%r7,__PT_R0(%r11)
        # clear user controlled registers to prevent speculative use
        xgr     %r0,%r0
@@ -542,7 +537,30 @@ ENTRY(mcck_int_handler)
        TSTMSK  __LC_MCCK_CODE,MCCK_CODE_PSW_IA_VALID
        jno     .Lmcck_panic
 4:     ssm     __LC_PGM_NEW_PSW        # turn dat on, keep irqs off
-       SWITCH_KERNEL __LC_GPREGS_SAVE_AREA+64
+       tmhh    %r8,0x0001                      # interrupting from user ?
+       jnz     .Lmcck_user
+#if IS_ENABLED(CONFIG_KVM)
+       lgr     %r14,%r9
+       larl    %r13,.Lsie_gmap
+       slgr    %r14,%r13
+       lghi    %r13,.Lsie_done - .Lsie_gmap
+       clgr    %r14,%r13
+       jhe     .Lmcck_stack
+       lghi    %r11,__LC_GPREGS_SAVE_AREA+64   # inside critical section, do cleanup
+       brasl   %r14,.Lcleanup_sie
+.Lmcck_stack:
+#endif
+       CHECK_STACK __LC_GPREGS_SAVE_AREA+64
+       lgr     %r11,%r15
+       aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
+       stg     %r11,__SF_BACKCHAIN(%r15)
+       j       5f
+.Lmcck_user:
+       BPENTER __TI_flags(%r12),_TIF_ISOLATE_BP
+       lctlg   %c1,%c1,__LC_KERNEL_ASCE
+       lg      %r15,__LC_KERNEL_STACK
+       xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
+5:     la      %r11,STACK_FRAME_OVERHEAD(%r15)
 .Lmcck_skip:
        lghi    %r14,__LC_GPREGS_SAVE_AREA+64
        stmg    %r0,%r7,__PT_R0(%r11)