]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
powerpc/signal32: Remove ifdefery in middle of if/else in sigreturn()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Fri, 19 Mar 2021 11:06:54 +0000 (11:06 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Sat, 3 Apr 2021 10:22:19 +0000 (21:22 +1100)
In the same spirit as commit f1cf4f93de2f ("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
arch/powerpc/kernel/signal_32.c

index 3b78748d6d85b3a69930842bd90d95695b0ed302..8dfe4fe777069dce424af692d6dbd75c10212f19 100644 (file)
@@ -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))