mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 07:33:19 +02:00
s390/entry: Unify save_area_sync and save_area_async
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>
This commit is contained in:
parent
56199bb956
commit
ee3daf7c05
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user