]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/ftrace: Use patch_instruction() return directly
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 9 May 2022 05:36:05 +0000 (07:36 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 19 May 2022 13:11:28 +0000 (23:11 +1000)
Instead of returning -EPERM when patch_instruction() fails,
just return what patch_instruction returns.

That simplifies ftrace_modify_code():

   0: 94 21 ff c0  stwu    r1,-64(r1)
   4: 93 e1 00 3c  stw     r31,60(r1)
   8: 7c 7f 1b 79  mr.     r31,r3
   c: 40 80 00 30  bge     3c <ftrace_modify_code+0x3c>
  10: 93 c1 00 38  stw     r30,56(r1)
  14: 7c 9e 23 78  mr      r30,r4
  18: 7c a4 2b 78  mr      r4,r5
  1c: 80 bf 00 00  lwz     r5,0(r31)
  20: 7c 1e 28 40  cmplw   r30,r5
  24: 40 82 00 34  bne     58 <ftrace_modify_code+0x58>
  28: 83 c1 00 38  lwz     r30,56(r1)
  2c: 7f e3 fb 78  mr      r3,r31
  30: 83 e1 00 3c  lwz     r31,60(r1)
  34: 38 21 00 40  addi    r1,r1,64
  38: 48 00 00 00  b       38 <ftrace_modify_code+0x38>
38: R_PPC_REL24 patch_instruction

Before:

   0: 94 21 ff c0  stwu    r1,-64(r1)
   4: 93 e1 00 3c  stw     r31,60(r1)
   8: 7c 7f 1b 79  mr.     r31,r3
   c: 40 80 00 4c  bge     58 <ftrace_modify_code+0x58>
  10: 93 c1 00 38  stw     r30,56(r1)
  14: 7c 9e 23 78  mr      r30,r4
  18: 7c a4 2b 78  mr      r4,r5
  1c: 80 bf 00 00  lwz     r5,0(r31)
  20: 7c 08 02 a6  mflr    r0
  24: 90 01 00 44  stw     r0,68(r1)
  28: 7c 1e 28 40  cmplw   r30,r5
  2c: 40 82 00 48  bne     74 <ftrace_modify_code+0x74>
  30: 7f e3 fb 78  mr      r3,r31
  34: 48 00 00 01  bl      34 <ftrace_modify_code+0x34>
34: R_PPC_REL24 patch_instruction
  38: 80 01 00 44  lwz     r0,68(r1)
  3c: 20 63 00 00  subfic  r3,r3,0
  40: 83 c1 00 38  lwz     r30,56(r1)
  44: 7c 63 19 10  subfe   r3,r3,r3
  48: 7c 08 03 a6  mtlr    r0
  4c: 83 e1 00 3c  lwz     r31,60(r1)
  50: 38 21 00 40  addi    r1,r1,64
  54: 4e 80 00 20  blr

It improves ftrace activation/deactivation duration by about 3%.

Modify patch_instruction() return on failure to -EPERM in order to
match with ftrace expectations. Other users of patch_instruction()
do not care about the exact error value returned.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/49a8597230713e2633e7d9d7b56140787c4a7e20.1652074503.git.christophe.leroy@csgroup.eu
arch/powerpc/kernel/trace/ftrace.c
arch/powerpc/lib/code-patching.c

index 98e82fa4980fa1837a67de3c11374ad484c864d4..1b05d33f96c670ee4c7f23eed2bb3809890d42db 100644 (file)
@@ -78,10 +78,7 @@ ftrace_modify_code(unsigned long ip, ppc_inst_t old, ppc_inst_t new)
        }
 
        /* replace the text with the new text */
-       if (patch_instruction((u32 *)ip, new))
-               return -EPERM;
-
-       return 0;
+       return patch_instruction((u32 *)ip, new);
 }
 
 /*
index 46ffce27135ed274c4680122279791de5a9ec87f..6edf0697a526b22c91b08b05a34c169726fae603 100644 (file)
@@ -33,7 +33,7 @@ static int __patch_instruction(u32 *exec_addr, ppc_inst_t instr, u32 *patch_addr
        return 0;
 
 failed:
-       return -EFAULT;
+       return -EPERM;
 }
 
 int raw_patch_instruction(u32 *addr, ppc_inst_t instr)