提交 f752ac4d 编写于 作者: M Martin Schwidefsky

s390/mm: protection exception PSW for aborted transaction

Protection exception usually are suppressing and the fault handler
needs to rewind the PSW by the instruction length to get the correct
fault address. Except for protection exceptions while the CPU is in
the middle of a transaction. The CPU stores the transaction abort
PSW at the start of the transaction, if the transaction is aborted
the PSW is already correct and may not be modified by the fault
handler.
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 b66ac63e
...@@ -395,7 +395,12 @@ void __kprobes do_protection_exception(struct pt_regs *regs) ...@@ -395,7 +395,12 @@ void __kprobes do_protection_exception(struct pt_regs *regs)
int fault; int fault;
trans_exc_code = regs->int_parm_long; trans_exc_code = regs->int_parm_long;
/* Protection exception is suppressing, decrement psw address. */ /*
* 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); regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16);
/* /*
* Check for low-address protection. This needs to be treated * Check for low-address protection. This needs to be treated
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册