if (!MSR_TM_ACTIVE(thr->regs->msr))
                goto out_and_saveregs;
 
+       WARN_ON(tm_suspend_disabled);
+
        TM_DEBUG("--- tm_reclaim on pid %d (NIP=%lx, "
                 "ccr=%lx, msr=%lx, trap=%lx)\n",
                 tsk->pid, thr->regs->nip,
 
 {
        unsigned long msr = regs->msr;
 
+       WARN_ON(tm_suspend_disabled);
+
        /* Remove TM bits from thread's MSR.  The MSR in the sigcontext
         * just indicates to userland that we were doing a transaction, but we
         * don't want to return in transactional state.  This also ensures
        int i;
 #endif
 
+       if (tm_suspend_disabled)
+               return 1;
        /*
         * restore general registers but not including MSR or SOFTE. Also
         * take care of keeping r2 (TLS) intact if not a signal.
 
 
        BUG_ON(!MSR_TM_ACTIVE(regs->msr));
 
+       WARN_ON(tm_suspend_disabled);
+
        /* Remove TM bits from thread's MSR.  The MSR in the sigcontext
         * just indicates to userland that we were doing a transaction, but we
         * don't want to return in transactional state.  This also ensures
 
        BUG_ON(tsk != current);
 
+       if (tm_suspend_disabled)
+               return -EINVAL;
+
        /* copy the GPRs */
        err |= __copy_from_user(regs->gpr, tm_sc->gp_regs, sizeof(regs->gpr));
        err |= __copy_from_user(&tsk->thread.ckpt_regs, sc->gp_regs,