Commit 0cd9b723 authored by Heiko Carstens's avatar Heiko Carstens
Browse files

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 ce9dfafe ("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: default avatarSven Schnelle <svens@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent 6c816038
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -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