]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/signal: Use PPC_RAW_xx() macros
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Thu, 20 May 2021 10:23:03 +0000 (10:23 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 15 Jun 2021 14:16:47 +0000 (00:16 +1000)
To improve readability, use PPC_RAW_xx() macros instead of
open coding. Those macros are self-explanatory so the comments
can go as well.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/4ca2bfdca2f47a293d05f61eb3c4e487ee170f1f.1621506159.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/ppc-opcode.h
arch/powerpc/kernel/signal_32.c
arch/powerpc/kernel/signal_64.c

index a067df9ca68c3c8d42d7e5b1db3d25521fcffc1c..e4e7abfa12851295a967e757a7be5ee20871e5e4 100644 (file)
 #define PPC_INST_MFSPR_DSCR_USER_MASK  0xfc1ffffe
 #define PPC_INST_MTSPR_DSCR_USER       0x7c0303a6
 #define PPC_INST_MTSPR_DSCR_USER_MASK  0xfc1ffffe
-#define PPC_INST_SC                    0x44000002
 #define PPC_INST_STRING                        0x7c00042a
 #define PPC_INST_STRING_MASK           0xfc0007fe
 #define PPC_INST_STRING_GEN_MASK       0xfc00067e
 #define PPC_INST_ADD                   0x7c000214
 #define PPC_INST_BLR                   0x4e800020
 #define PPC_INST_BCTR                  0x4e800420
-#define PPC_INST_BCTRL                 0x4e800421
 #define PPC_INST_DIVD                  0x7c0003d2
 #define PPC_INST_RLDICR                        0x78000004
 #define PPC_INST_ORI                   0x60000000
 #define PPC_RAW_STBCIX(s, a, b)                (0x7c0007aa | __PPC_RS(s) | __PPC_RA(a) | __PPC_RB(b))
 #define PPC_RAW_DCBFPS(a, b)           (0x7c0000ac | ___PPC_RA(a) | ___PPC_RB(b) | (4 << 21))
 #define PPC_RAW_DCBSTPS(a, b)          (0x7c0000ac | ___PPC_RA(a) | ___PPC_RB(b) | (6 << 21))
+#define PPC_RAW_SC()                   (0x44000002)
+
 /*
  * Define what the VSX XX1 form instructions will look like, then add
  * the 128 bit load store instructions based on that.
 #define PPC_RAW_MTLR(r)                        (0x7c0803a6 | ___PPC_RT(r))
 #define PPC_RAW_MFLR(t)                        (PPC_INST_MFLR | ___PPC_RT(t))
 #define PPC_RAW_BCTR()                 (PPC_INST_BCTR)
+#define PPC_RAW_BCTRL()                        (0x4e800421)
 #define PPC_RAW_MTCTR(r)               (PPC_INST_MTCTR | ___PPC_RT(r))
 #define PPC_RAW_ADDI(d, a, i)          (PPC_INST_ADDI | ___PPC_RT(d) | ___PPC_RA(a) | IMM_L(i))
 #define PPC_RAW_LI(r, i)               PPC_RAW_ADDI(r, 0, i)
index 8f05ed0da292b09e4303919d0f51456f43da3d4a..a50d091334ea4a3dcbe93444938b5d0ae6e9d5a4 100644 (file)
@@ -828,10 +828,8 @@ int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset,
                tramp = VDSO32_SYMBOL(tsk->mm->context.vdso, sigtramp_rt32);
        } else {
                tramp = (unsigned long)mctx->mc_pad;
-               /* Set up the sigreturn trampoline: li r0,sigret; sc */
-               unsafe_put_user(PPC_INST_ADDI + __NR_rt_sigreturn, &mctx->mc_pad[0],
-                               failed);
-               unsafe_put_user(PPC_INST_SC, &mctx->mc_pad[1], failed);
+               unsafe_put_user(PPC_RAW_LI(_R0, __NR_rt_sigreturn), &mctx->mc_pad[0], failed);
+               unsafe_put_user(PPC_RAW_SC(), &mctx->mc_pad[1], failed);
                asm("dcbst %y0; sync; icbi %y0; sync" :: "Z" (mctx->mc_pad[0]));
        }
        unsafe_put_sigset_t(&frame->uc.uc_sigmask, oldset, failed);
@@ -926,9 +924,8 @@ int handle_signal32(struct ksignal *ksig, sigset_t *oldset,
                tramp = VDSO32_SYMBOL(tsk->mm->context.vdso, sigtramp32);
        } else {
                tramp = (unsigned long)mctx->mc_pad;
-               /* Set up the sigreturn trampoline: li r0,sigret; sc */
-               unsafe_put_user(PPC_INST_ADDI + __NR_sigreturn, &mctx->mc_pad[0], failed);
-               unsafe_put_user(PPC_INST_SC, &mctx->mc_pad[1], failed);
+               unsafe_put_user(PPC_RAW_LI(_R0, __NR_sigreturn), &mctx->mc_pad[0], failed);
+               unsafe_put_user(PPC_RAW_SC(), &mctx->mc_pad[1], failed);
                asm("dcbst %y0; sync; icbi %y0; sync" :: "Z" (mctx->mc_pad[0]));
        }
        user_access_end();
index f9e1f5428b9e3d4006c0af034c7ff1bd3d7c5ea1..0f964668259823f1ba8b80f9356f6bb7e1277a71 100644 (file)
@@ -618,15 +618,12 @@ static long setup_trampoline(unsigned int syscall, unsigned int __user *tramp)
        int i;
        long err = 0;
 
-       /* bctrl # call the handler */
-       err |= __put_user(PPC_INST_BCTRL, &tramp[0]);
-       /* addi r1, r1, __SIGNAL_FRAMESIZE  # Pop the dummy stackframe */
-       err |= __put_user(PPC_INST_ADDI | __PPC_RT(R1) | __PPC_RA(R1) |
-                         (__SIGNAL_FRAMESIZE & 0xffff), &tramp[1]);
-       /* li r0, __NR_[rt_]sigreturn| */
-       err |= __put_user(PPC_INST_ADDI | (syscall & 0xffff), &tramp[2]);
-       /* sc */
-       err |= __put_user(PPC_INST_SC, &tramp[3]);
+       /* Call the handler and pop the dummy stackframe*/
+       err |= __put_user(PPC_RAW_BCTRL(), &tramp[0]);
+       err |= __put_user(PPC_RAW_ADDI(_R1, _R1, __SIGNAL_FRAMESIZE), &tramp[1]);
+
+       err |= __put_user(PPC_RAW_LI(_R0, syscall), &tramp[2]);
+       err |= __put_user(PPC_RAW_SC(), &tramp[3]);
 
        /* Minimal traceback info */
        for (i=TRAMP_TRACEBACK; i < TRAMP_SIZE ;i++)