This is the only place we are going to recheckpoint now. Now the task needs to have TIF_RESTORE_TM flag set, which will get into restore_tm_state() and execute the recheckpoint if MSR shows that the transaction was active.
Every time a task is required to recheckpoint, or just have the TM SPRs restore, the TIF_RESTORE_TM flag should be set and the task MSR should properly be in a transactional state, which will be checked by restore_tm_state(). Signed-off-by: Breno Leitao <lei...@debian.org> --- arch/powerpc/kernel/process.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 913c5725cdb2..f22f82ce174c 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c @@ -1069,6 +1069,10 @@ void restore_tm_state(struct pt_regs *regs) if (!MSR_TM_ACTIVE(regs->msr)) return; + tm_enable(); + /* The only place we recheckpoint */ + tm_recheckpoint(¤t->thread); + msr_diff = current->thread.ckpt_regs.msr & ~regs->msr; msr_diff &= MSR_FP | MSR_VEC | MSR_VSX; -- 2.19.0