diff options
Diffstat (limited to 'arch/s390/mm/fault.c')
| -rw-r--r-- | arch/s390/mm/fault.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 2fb9e63b8fc..047c3e4c59a 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c @@ -395,8 +395,13 @@ void __kprobes do_protection_exception(struct pt_regs *regs)  	int fault;  	trans_exc_code = regs->int_parm_long; -	/* Protection exception is suppressing, decrement psw address. */ -	regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16); +	/* +	 * Protection exceptions are suppressing, decrement psw address. +	 * The exception to this rule are aborted transactions, for these +	 * the PSW already points to the correct location. +	 */ +	if (!(regs->int_code & 0x200)) +		regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16);  	/*  	 * Check for low-address protection.  This needs to be treated  	 * as a special case because the translation exception code  |