]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
s390: split cleanup_sie
authorSven Schnelle <svens@linux.ibm.com>
Wed, 3 Feb 2021 16:50:00 +0000 (17:50 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Sat, 13 Feb 2021 16:17:53 +0000 (17:17 +0100)
The current code uses the address in %r11 to figure out whether
it was called from the machine check handler or from a normal
interrupt handler. Instead of doing this implicit logic (which
is mostly a leftover from the old critical cleanup approach)
just add a second label and use that.

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

index d1236a9f73b244840a77cc742172b18fa432fb9f..c10b9f31eef7993fde313814cb3d3b68db724a90 100644 (file)
@@ -214,7 +214,7 @@ ENTRY(sie64a)
 # are some corner cases (e.g. runtime instrumentation) where ILC is unpredictable.
 # Other instructions between sie64a and .Lsie_done should not cause program
 # interrupts. So lets use 3 nops as a landing pad for all possible rewinds.
-# See also .Lcleanup_sie
+# See also .Lcleanup_sie_mcck/.Lcleanup_sie_int
 .Lrewind_pad6:
        nopr    7
 .Lrewind_pad4:
@@ -398,8 +398,7 @@ ENTRY(\name)
        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
+       brasl   %r14,.Lcleanup_sie_int
 #endif
 0:     CHECK_STACK __LC_SAVE_AREA_ASYNC
        lgr     %r11,%r15
@@ -548,8 +547,7 @@ ENTRY(mcck_int_handler)
        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
+       brasl   %r14,.Lcleanup_sie_mcck
 #endif
        j       .Lmcck_stack
 .Lmcck_user:
@@ -651,16 +649,15 @@ ENDPROC(stack_overflow)
 #endif
 
 #if IS_ENABLED(CONFIG_KVM)
-.Lcleanup_sie:
-       cghi    %r11,__LC_SAVE_AREA_ASYNC       #Is this in normal interrupt?
-       je      1f
+.Lcleanup_sie_mcck:
        larl    %r13,.Lsie_entry
        slgr    %r9,%r13
        larl    %r13,.Lsie_skip
        clgr    %r9,%r13
-       jh      1f
+       jh      .Lcleanup_sie_int
        oi      __LC_CPU_FLAGS+7, _CIF_MCCK_GUEST
-1:     BPENTER __SF_SIE_FLAGS(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
+.Lcleanup_sie_int:
+       BPENTER __SF_SIE_FLAGS(%r15),(_TIF_ISOLATE_BP|_TIF_ISOLATE_BP_GUEST)
        lg      %r9,__SF_SIE_CONTROL(%r15)      # get control block pointer
        ni      __SIE_PROG0C+3(%r9),0xfe        # no longer in SIE
        lctlg   %c1,%c1,__LC_KERNEL_ASCE