diff options
Diffstat (limited to 'arch/s390/kernel/entry64.S')
| -rw-r--r-- | arch/s390/kernel/entry64.S | 20 | 
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 7a0fd426ca9..5f729d627ce 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S @@ -865,6 +865,26 @@ restart_crash:  restart_go:  #endif +# +# PSW restart interrupt handler +# +ENTRY(psw_restart_int_handler) +	stg	%r15,__LC_SAVE_AREA_64(%r0)	# save r15 +	larl	%r15,restart_stack		# load restart stack +	lg	%r15,0(%r15) +	aghi	%r15,-SP_SIZE			# make room for pt_regs +	stmg	%r0,%r14,SP_R0(%r15)		# store gprs %r0-%r14 to stack +	mvc	SP_R15(8,%r15),__LC_SAVE_AREA_64(%r0)# store saved %r15 to stack +	mvc	SP_PSW(16,%r15),__LC_RST_OLD_PSW(%r0)# store restart old psw +	xc	__SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) # set backchain to 0 +	brasl	%r14,do_restart + +	larl	%r14,restart_psw_crash		# load disabled wait PSW if +	lpswe	0(%r14)				# do_restart returns +	.align 8 +restart_psw_crash: +	.quad	0x0002000080000000,0x0000000000000000 + restart_psw_crash +  	.section .kprobes.text, "ax"  #ifdef CONFIG_CHECK_STACK  |