s390: add separate program check exit path
System call and program check handler both use the system call exit
path when returning to previous context. However the program check
handler jumps right to the end of the system call exit path if the
previous context is kernel context.
This lead to the quite odd double disabling of interrupts in the
system call exit path introduced with commit ce9dfafe29
("s390:
fix system call exit path").
To avoid that have a separate program check handler exit path if the
previous context is kernel context.
Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
parent
6c81603801
commit
0cd9b7230c
@ -430,8 +430,6 @@ ENTRY(system_call)
|
||||
TSTMSK __LC_CPU_FLAGS,(_CIF_WORK-_CIF_FPU)
|
||||
jnz .Lsysc_work
|
||||
BPEXIT __TI_flags(%r12),_TIF_ISOLATE_BP
|
||||
.Lsysc_restore:
|
||||
DISABLE_INTS
|
||||
TSTMSK __LC_CPU_FLAGS, _CIF_FPU
|
||||
jz .Lsysc_skip_fpu
|
||||
brasl %r14,load_fpu_regs
|
||||
@ -709,10 +707,20 @@ ENTRY(pgm_check_handler)
|
||||
.Lpgm_return:
|
||||
LOCKDEP_SYS_EXIT
|
||||
tm __PT_PSW+1(%r11),0x01 # returning to user ?
|
||||
jno .Lsysc_restore
|
||||
jno .Lpgm_restore
|
||||
TSTMSK __PT_FLAGS(%r11),_PIF_SYSCALL
|
||||
jo .Lsysc_do_syscall
|
||||
j .Lsysc_tif
|
||||
.Lpgm_restore:
|
||||
DISABLE_INTS
|
||||
TSTMSK __LC_CPU_FLAGS, _CIF_FPU
|
||||
jz .Lpgm_skip_fpu
|
||||
brasl %r14,load_fpu_regs
|
||||
.Lpgm_skip_fpu:
|
||||
mvc __LC_RETURN_PSW(16),__PT_PSW(%r11)
|
||||
stpt __LC_EXIT_TIMER
|
||||
lmg %r0,%r15,__PT_R0(%r11)
|
||||
b __LC_RETURN_LPSWE
|
||||
|
||||
#
|
||||
# PER event in supervisor state, must be kprobes
|
||||
|
Loading…
Reference in New Issue
Block a user