powerpc/tm: Always reclaim in start_thread() for exec() class syscalls
[firefly-linux-kernel-4.4.55.git] / arch / powerpc / kernel / process.c
index 646bf4d222c1caeda5c7851de74fbbe0ad0d65d9..cf788d7d7e56fdf59abc796874ed3886eb821217 100644 (file)
@@ -1239,6 +1239,16 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
                current->thread.regs = regs - 1;
        }
 
+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
+       /*
+        * Clear any transactional state, we're exec()ing. The cause is
+        * not important as there will never be a recheckpoint so it's not
+        * user visible.
+        */
+       if (MSR_TM_SUSPENDED(mfmsr()))
+               tm_reclaim_current(0);
+#endif
+
        memset(regs->gpr, 0, sizeof(regs->gpr));
        regs->ctr = 0;
        regs->link = 0;