mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
Revert "powerpc/tm: Unset MSR[TS] if not recheckpointing"
This reverts commita9935a1276which is commit6f5b9f018fupstream. It breaks the powerpc build, so drop it from the tree until a fix goes upstream. Reported-by: Guenter 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
@@ -1140,11 +1140,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
|
||||
{
|
||||
struct rt_sigframe __user *rt_sf;
|
||||
struct pt_regs *regs = current_pt_regs();
|
||||
int tm_restore = 0;
|
||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||
struct ucontext __user *uc_transact;
|
||||
unsigned long msr_hi;
|
||||
unsigned long tmp;
|
||||
int tm_restore = 0;
|
||||
#endif
|
||||
/* Always make any pending restarted system calls return -EINTR */
|
||||
current->restart_block.fn = do_no_restart_syscall;
|
||||
@@ -1192,19 +1192,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
|
||||
goto bad;
|
||||
}
|
||||
}
|
||||
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 */
|
||||
#endif
|
||||
if (!tm_restore)
|
||||
if (do_setcontext(&rt_sf->uc, regs, 1))
|
||||
goto bad;
|
||||
/* Fall through, for non-TM restore */
|
||||
#endif
|
||||
if (do_setcontext(&rt_sf->uc, regs, 1))
|
||||
goto bad;
|
||||
|
||||
/*
|
||||
* It's not clear whether or why it is desirable to save the
|
||||
|
||||
@@ -740,23 +740,11 @@ SYSCALL_DEFINE0(rt_sigreturn)
|
||||
&uc_transact->uc_mcontext))
|
||||
goto badframe;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
/* Fall through, for non-TM restore */
|
||||
if (!MSR_TM_ACTIVE(msr)) {
|
||||
/*
|
||||
* 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))
|
||||
goto badframe;
|
||||
}
|
||||
#endif
|
||||
if (restore_sigcontext(current, NULL, 1, &uc->uc_mcontext))
|
||||
goto badframe;
|
||||
|
||||
if (restore_altstack(&uc->uc_stack))
|
||||
goto badframe;
|
||||
|
||||
Reference in New Issue
Block a user