]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
s390/entry: Unify save_area_sync and save_area_async
authorSven Schnelle <svens@linux.ibm.com>
Wed, 28 Aug 2024 11:50:04 +0000 (13:50 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 29 Aug 2024 20:56:34 +0000 (22:56 +0200)
In the past two save areas existed because interrupt handlers
and system call / program check handlers where entered with
interrupts enabled. To prevent a handler from overwriting the
save areas from the previous handler, interrupts used the async
save area, while system call and program check handler used the
sync save area.

Since the removal of critical section cleanup from entry.S, handlers are
entered with interrupts disabled. When the interrupts are re-enabled,
the save area is no longer need. Therefore merge both save areas into one.

Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/boot/head.S
arch/s390/include/asm/lowcore.h
arch/s390/kernel/asm-offsets.c
arch/s390/kernel/entry.S

index 637c29c3f6e33a6835fb1b51627a35622a5fee19..0a47b16f641289d55a425aa29890c74790a24339 100644 (file)
@@ -299,11 +299,11 @@ SYM_CODE_END(startup_normal)
 # the save area and does disabled wait with a faulty address.
 #
 SYM_CODE_START_LOCAL(startup_pgm_check_handler)
-       stmg    %r8,%r15,__LC_SAVE_AREA_SYNC
+       stmg    %r8,%r15,__LC_SAVE_AREA
        la      %r8,4095
        stctg   %c0,%c15,__LC_CREGS_SAVE_AREA-4095(%r8)
        stmg    %r0,%r7,__LC_GPREGS_SAVE_AREA-4095(%r8)
-       mvc     __LC_GPREGS_SAVE_AREA-4095+64(64,%r8),__LC_SAVE_AREA_SYNC
+       mvc     __LC_GPREGS_SAVE_AREA-4095+64(64,%r8),__LC_SAVE_AREA
        mvc     __LC_PSW_SAVE_AREA-4095(16,%r8),__LC_PGM_OLD_PSW
        mvc     __LC_RETURN_PSW(16),__LC_PGM_OLD_PSW
        ni      __LC_RETURN_PSW,0xfc    # remove IO and EX bits
index 183ac29afaf8214d6b19116799fc1b39ebda95dc..48c64716d1f2fdc67cf6e7e850f184327d12caa0 100644 (file)
@@ -98,8 +98,8 @@ struct lowcore {
        psw_t   io_new_psw;                     /* 0x01f0 */
 
        /* Save areas. */
-       __u64   save_area_sync[8];              /* 0x0200 */
-       __u64   save_area_async[8];             /* 0x0240 */
+       __u64   save_area[8];                   /* 0x0200 */
+       __u8    pad_0x0240[0x0280-0x0240];      /* 0x0240 */
        __u64   save_area_restart[1];           /* 0x0280 */
 
        __u64   pcpu;                           /* 0x0288 */
index ffa0dd2dbaacba0fcdaebf0e6c36abd5ceda47c1..5529248d84fb8729887d8cae5788f06d6f9bb23f 100644 (file)
@@ -112,8 +112,7 @@ int main(void)
        OFFSET(__LC_MCK_NEW_PSW, lowcore, mcck_new_psw);
        OFFSET(__LC_IO_NEW_PSW, lowcore, io_new_psw);
        /* software defined lowcore locations 0x200 - 0xdff*/
-       OFFSET(__LC_SAVE_AREA_SYNC, lowcore, save_area_sync);
-       OFFSET(__LC_SAVE_AREA_ASYNC, lowcore, save_area_async);
+       OFFSET(__LC_SAVE_AREA, lowcore, save_area);
        OFFSET(__LC_SAVE_AREA_RESTART, lowcore, save_area_restart);
        OFFSET(__LC_PCPU, lowcore, pcpu);
        OFFSET(__LC_RETURN_PSW, lowcore, return_psw);
index 36424e53d63b50c05c1fd4b8f837b887dcf2c7e4..42ac4145dfe0add1f52445e10542fe87390cc049 100644 (file)
@@ -264,7 +264,7 @@ EXPORT_SYMBOL(sie_exit)
  */
 
 SYM_CODE_START(system_call)
-       STMG_LC %r8,%r15,__LC_SAVE_AREA_SYNC
+       STMG_LC %r8,%r15,__LC_SAVE_AREA
        GET_LC  %r13
        stpt    __LC_SYS_ENTER_TIMER(%r13)
        BPOFF
@@ -287,7 +287,7 @@ SYM_CODE_START(system_call)
        xgr     %r10,%r10
        xgr     %r11,%r11
        la      %r2,STACK_FRAME_OVERHEAD(%r15)  # pointer to pt_regs
-       mvc     __PT_R8(64,%r2),__LC_SAVE_AREA_SYNC(%r13)
+       mvc     __PT_R8(64,%r2),__LC_SAVE_AREA(%r13)
        MBEAR   %r2,%r13
        lgr     %r3,%r14
        brasl   %r14,__do_syscall
@@ -323,7 +323,7 @@ SYM_CODE_END(ret_from_fork)
  */
 
 SYM_CODE_START(pgm_check_handler)
-       STMG_LC %r8,%r15,__LC_SAVE_AREA_SYNC
+       STMG_LC %r8,%r15,__LC_SAVE_AREA
        GET_LC  %r13
        stpt    __LC_SYS_ENTER_TIMER(%r13)
        BPOFF
@@ -338,16 +338,16 @@ SYM_CODE_START(pgm_check_handler)
        jnz     2f                      # -> enabled, can't be a double fault
        tm      __LC_PGM_ILC+3(%r13),0x80       # check for per exception
        jnz     .Lpgm_svcper            # -> single stepped svc
-2:     CHECK_STACK __LC_SAVE_AREA_SYNC,%r13
+2:     CHECK_STACK __LC_SAVE_AREA,%r13
        aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
        # CHECK_VMAP_STACK branches to stack_overflow or 4f
-       CHECK_VMAP_STACK __LC_SAVE_AREA_SYNC,%r13,4f
+       CHECK_VMAP_STACK __LC_SAVE_AREA,%r13,4f
 3:     lg      %r15,__LC_KERNEL_STACK(%r13)
 4:     la      %r11,STACK_FRAME_OVERHEAD(%r15)
        xc      __PT_FLAGS(8,%r11),__PT_FLAGS(%r11)
        xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
        stmg    %r0,%r7,__PT_R0(%r11)
-       mvc     __PT_R8(64,%r11),__LC_SAVE_AREA_SYNC(%r13)
+       mvc     __PT_R8(64,%r11),__LC_SAVE_AREA(%r13)
        mvc     __PT_LAST_BREAK(8,%r11),__LC_PGM_LAST_BREAK(%r13)
        stctg   %c1,%c1,__PT_CR1(%r11)
 #if IS_ENABLED(CONFIG_KVM)
@@ -398,7 +398,7 @@ SYM_CODE_END(pgm_check_handler)
  */
 .macro INT_HANDLER name,lc_old_psw,handler
 SYM_CODE_START(\name)
-       STMG_LC %r8,%r15,__LC_SAVE_AREA_ASYNC
+       STMG_LC %r8,%r15,__LC_SAVE_AREA
        GET_LC  %r13
        stckf   __LC_INT_CLOCK(%r13)
        stpt    __LC_SYS_ENTER_TIMER(%r13)
@@ -414,7 +414,7 @@ SYM_CODE_START(\name)
        BPENTER __SF_SIE_FLAGS(%r15),_TIF_ISOLATE_BP_GUEST
        SIEEXIT __SF_SIE_CONTROL(%r15),%r13
 #endif
-0:     CHECK_STACK __LC_SAVE_AREA_ASYNC,%r13
+0:     CHECK_STACK __LC_SAVE_AREA,%r13
        aghi    %r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)
        j       2f
 1:     lctlg   %c1,%c1,__LC_KERNEL_ASCE(%r13)
@@ -432,7 +432,7 @@ SYM_CODE_START(\name)
        xgr     %r7,%r7
        xgr     %r10,%r10
        xc      __PT_FLAGS(8,%r11),__PT_FLAGS(%r11)
-       mvc     __PT_R8(64,%r11),__LC_SAVE_AREA_ASYNC(%r13)
+       mvc     __PT_R8(64,%r11),__LC_SAVE_AREA(%r13)
        MBEAR   %r11,%r13
        stmg    %r8,%r9,__PT_PSW(%r11)
        lgr     %r2,%r11                # pass pointer to pt_regs
@@ -601,14 +601,14 @@ SYM_CODE_END(restart_int_handler)
 
        __INIT
 SYM_CODE_START(early_pgm_check_handler)
-       STMG_LC %r8,%r15,__LC_SAVE_AREA_SYNC
+       STMG_LC %r8,%r15,__LC_SAVE_AREA
        GET_LC  %r13
        aghi    %r15,-(STACK_FRAME_OVERHEAD+__PT_SIZE)
        la      %r11,STACK_FRAME_OVERHEAD(%r15)
        xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)
        stmg    %r0,%r7,__PT_R0(%r11)
        mvc     __PT_PSW(16,%r11),__LC_PGM_OLD_PSW(%r13)
-       mvc     __PT_R8(64,%r11),__LC_SAVE_AREA_SYNC(%r13)
+       mvc     __PT_R8(64,%r11),__LC_SAVE_AREA(%r13)
        lgr     %r2,%r11
        brasl   %r14,__do_early_pgm_check
        mvc     __LC_RETURN_PSW(16,%r13),STACK_FRAME_OVERHEAD+__PT_PSW(%r15)