powerpc/signal_32: Simplify loop in PPC64 save_general_regs()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 7 Jul 2020 12:33:36 +0000 (12:33 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 15 Jul 2020 02:04:40 +0000 (12:04 +1000)
save_general_regs() which does special handling when i == PT_SOFTE.

Rewrite it to minimise the specific part, especially the __put_user()
and associated error handling is the same so make it common.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
[mpe: Use a regular if rather than ternary operator]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/47a38df46cae5a5a88a558a64d71f75e9c4d9950.1594125164.git.christophe.leroy@csgroup.eu
arch/powerpc/kernel/signal_32.c

index 0fd59fb..96950f1 100644 (file)
@@ -102,20 +102,18 @@ static inline int save_general_regs(struct pt_regs *regs,
                struct mcontext __user *frame)
 {
        elf_greg_t64 *gregs = (elf_greg_t64 *)regs;
-       int i;
-       /* Force usr to alway see softe as 1 (interrupts enabled) */
-       elf_greg_t64 softe = 0x1;
+       int val, i;
 
        WARN_ON(!FULL_REGS(regs));
 
        for (i = 0; i <= PT_RESULT; i ++) {
-               if ( i == PT_SOFTE) {
-                       if(__put_user((unsigned int)softe, &frame->mc_gregs[i]))
-                               return -EFAULT;
-                       else
-                               continue;
-               }
-               if (__put_user((unsigned int)gregs[i], &frame->mc_gregs[i]))
+               /* Force usr to alway see softe as 1 (interrupts enabled) */
+               if (i == PT_SOFTE)
+                       val = 1;
+               else
+                       val = gregs[i];
+
+               if (__put_user(val, &frame->mc_gregs[i]))
                        return -EFAULT;
        }
        return 0;