mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 21:24:08 +08:00
powerpc/signal32: Remove ifdefery in middle of if/else in sigreturn()
In the same spirit as commit f1cf4f93de
("powerpc/signal32: Remove
ifdefery in middle of if/else")
MSR_TM_ACTIVE() is always defined and returns always 0 when
CONFIG_PPC_TRANSACTIONAL_MEM is not selected, so the awful
ifdefery in the middle of an if/else can be removed.
Make 'msr_hi' a 'long long' to avoid build failure on PPC32
due to the 32 bits left shift.
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a4b48b2f0be1ef13fc8e57452b7f8350da28d521.1616151715.git.christophe.leroy@csgroup.eu
This commit is contained in:
parent
f918a81e20
commit
ca9e1605cd
@ -740,6 +740,12 @@ static long restore_tm_user_regs(struct pt_regs *regs,
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static long restore_tm_user_regs(struct pt_regs *regs, struct mcontext __user *sr,
|
||||
struct mcontext __user *tm_sr)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC64
|
||||
@ -1317,10 +1323,9 @@ SYSCALL_DEFINE0(sigreturn)
|
||||
struct mcontext __user *sr;
|
||||
void __user *addr;
|
||||
sigset_t set;
|
||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||
struct mcontext __user *mcp, *tm_mcp;
|
||||
unsigned long msr_hi;
|
||||
#endif
|
||||
struct mcontext __user *mcp;
|
||||
struct mcontext __user *tm_mcp = NULL;
|
||||
unsigned long long msr_hi = 0;
|
||||
|
||||
/* Always make any pending restarted system calls return -EINTR */
|
||||
current->restart_block.fn = do_no_restart_syscall;
|
||||
@ -1343,19 +1348,18 @@ SYSCALL_DEFINE0(sigreturn)
|
||||
#endif
|
||||
set_current_blocked(&set);
|
||||
|
||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||
mcp = (struct mcontext __user *)&sf->mctx;
|
||||
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
|
||||
tm_mcp = (struct mcontext __user *)&sf->mctx_transact;
|
||||
if (__get_user(msr_hi, &tm_mcp->mc_gregs[PT_MSR]))
|
||||
goto badframe;
|
||||
#endif
|
||||
if (MSR_TM_ACTIVE(msr_hi<<32)) {
|
||||
if (!cpu_has_feature(CPU_FTR_TM))
|
||||
goto badframe;
|
||||
if (restore_tm_user_regs(regs, mcp, tm_mcp))
|
||||
goto badframe;
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
} else {
|
||||
sr = (struct mcontext __user *)from_user_ptr(sigctx.regs);
|
||||
addr = sr;
|
||||
if (!access_ok(sr, sizeof(*sr))
|
||||
|
Loading…
Reference in New Issue
Block a user