Commit 6d9e96f3 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Revert "powerpc/tm: Unset MSR[TS] if not recheckpointing"

This reverts commit a9935a12 which is
commit 6f5b9f01 upstream.

It breaks the powerpc build, so drop it from the tree until a fix goes
upstream.
Reported-by: default avatarGuenter Roeck <linux@roeck-us.net>
Cc: Breno Leitao <leitao@debian.org>
Cc: Michal Suchánek <msuchanek@suse.de>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Christoph Biedl <linux-kernel.bfrz@manchmal.in-ulm.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent eb05c029
...@@ -1140,11 +1140,11 @@ SYSCALL_DEFINE0(rt_sigreturn) ...@@ -1140,11 +1140,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
{ {
struct rt_sigframe __user *rt_sf; struct rt_sigframe __user *rt_sf;
struct pt_regs *regs = current_pt_regs(); struct pt_regs *regs = current_pt_regs();
int tm_restore = 0;
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
struct ucontext __user *uc_transact; struct ucontext __user *uc_transact;
unsigned long msr_hi; unsigned long msr_hi;
unsigned long tmp; unsigned long tmp;
int tm_restore = 0;
#endif #endif
/* Always make any pending restarted system calls return -EINTR */ /* Always make any pending restarted system calls return -EINTR */
current->restart_block.fn = do_no_restart_syscall; current->restart_block.fn = do_no_restart_syscall;
...@@ -1192,17 +1192,9 @@ SYSCALL_DEFINE0(rt_sigreturn) ...@@ -1192,17 +1192,9 @@ SYSCALL_DEFINE0(rt_sigreturn)
goto bad; goto bad;
} }
} }
if (!tm_restore) { if (!tm_restore)
/*
* Unset regs->msr because ucontext MSR TS is not
* set, and recheckpoint was not called. This avoid
* hitting a TM Bad thing at RFID
*/
regs->msr &= ~MSR_TS_MASK;
}
/* Fall through, for non-TM restore */ /* Fall through, for non-TM restore */
#endif #endif
if (!tm_restore)
if (do_setcontext(&rt_sf->uc, regs, 1)) if (do_setcontext(&rt_sf->uc, regs, 1))
goto bad; goto bad;
......
...@@ -740,23 +740,11 @@ SYSCALL_DEFINE0(rt_sigreturn) ...@@ -740,23 +740,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
&uc_transact->uc_mcontext)) &uc_transact->uc_mcontext))
goto badframe; goto badframe;
} }
#endif else
/* Fall through, for non-TM restore */ /* Fall through, for non-TM restore */
if (!MSR_TM_ACTIVE(msr)) { #endif
/*
* Unset MSR[TS] on the thread regs since MSR from user
* context does not have MSR active, and recheckpoint was
* not called since restore_tm_sigcontexts() was not called
* also.
*
* If not unsetting it, the code can RFID to userspace with
* MSR[TS] set, but without CPU in the proper state,
* causing a TM bad thing.
*/
current->thread.regs->msr &= ~MSR_TS_MASK;
if (restore_sigcontext(current, NULL, 1, &uc->uc_mcontext)) if (restore_sigcontext(current, NULL, 1, &uc->uc_mcontext))
goto badframe; goto badframe;
}
if (restore_altstack(&uc->uc_stack)) if (restore_altstack(&uc->uc_stack))
goto badframe; goto badframe;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment