diff options
Diffstat (limited to 'arch/s390/kernel/entry64.S')
| -rw-r--r-- | arch/s390/kernel/entry64.S | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 349b7eeb348..7549985402f 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S @@ -10,6 +10,7 @@  #include <linux/init.h>  #include <linux/linkage.h> +#include <asm/processor.h>  #include <asm/cache.h>  #include <asm/errno.h>  #include <asm/ptrace.h> @@ -412,6 +413,11 @@ ENTRY(pgm_check_handler)  1:	UPDATE_VTIME %r14,__LC_SYNC_ENTER_TIMER  	LAST_BREAK %r14  	lg	%r15,__LC_KERNEL_STACK +	lg	%r14,__TI_task(%r12) +	lghi	%r13,__LC_PGM_TDB +	tm	__LC_PGM_ILC+2,0x02	# check for transaction abort +	jz	2f +	mvc	__THREAD_trap_tdb(256,%r14),0(%r13)  2:	aghi	%r15,-(STACK_FRAME_OVERHEAD + __PT_SIZE)  	la	%r11,STACK_FRAME_OVERHEAD(%r15)  	stmg	%r0,%r7,__PT_R0(%r11) @@ -422,13 +428,12 @@ ENTRY(pgm_check_handler)  	stg	%r10,__PT_ARGS(%r11)  	tm	__LC_PGM_ILC+3,0x80	# check for per exception  	jz	0f -	lg	%r1,__TI_task(%r12)  	tmhh	%r8,0x0001		# kernel per event ?  	jz	pgm_kprobe  	oi	__TI_flags+7(%r12),_TIF_PER_TRAP -	mvc	__THREAD_per_address(8,%r1),__LC_PER_ADDRESS -	mvc	__THREAD_per_cause(2,%r1),__LC_PER_CAUSE -	mvc	__THREAD_per_paid(1,%r1),__LC_PER_PAID +	mvc	__THREAD_per_address(8,%r14),__LC_PER_ADDRESS +	mvc	__THREAD_per_cause(2,%r14),__LC_PER_CAUSE +	mvc	__THREAD_per_paid(1,%r14),__LC_PER_PAID  0:	REENABLE_IRQS  	xc	__SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15)  	larl	%r1,pgm_check_table @@ -1004,9 +1009,7 @@ sie_fault:  .Lhost_id:  	.quad	0 -	.section __ex_table,"a" -	.quad	sie_loop,sie_fault -	.previous +	EX_TABLE(sie_loop,sie_fault)  #endif  		.section .rodata, "a"  |