powerpc/ftrace: Use is_offset_in_branch_range()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 9 May 2022 05:36:02 +0000 (07:36 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 19 May 2022 13:11:28 +0000 (23:11 +1000)
Use is_offset_in_branch_range() instead of create_branch()
to check if a target is within branch range.

This patch together with the previous one improves
ftrace activation time by 7%

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

index 3ce3697..41c45b9 100644 (file)
@@ -89,11 +89,9 @@ ftrace_modify_code(unsigned long ip, ppc_inst_t old, ppc_inst_t new)
  */
 static int test_24bit_addr(unsigned long ip, unsigned long addr)
 {
-       ppc_inst_t op;
        addr = ppc_function_entry((void *)addr);
 
-       /* use the create_branch to verify that this offset can be branched */
-       return create_branch(&op, (u32 *)ip, addr, 0) == 0;
+       return is_offset_in_branch_range(addr - ip);
 }
 
 static int is_bl_op(ppc_inst_t op)
@@ -261,7 +259,6 @@ __ftrace_make_nop(struct module *mod,
 static unsigned long find_ftrace_tramp(unsigned long ip)
 {
        int i;
-       ppc_inst_t instr;
 
        /*
         * We have the compiler generated long_branch tramps at the end
@@ -270,8 +267,7 @@ static unsigned long find_ftrace_tramp(unsigned long ip)
        for (i = NUM_FTRACE_TRAMPS - 1; i >= 0; i--)
                if (!ftrace_tramps[i])
                        continue;
-               else if (create_branch(&instr, (void *)ip,
-                                      ftrace_tramps[i], 0) == 0)
+               else if (is_offset_in_branch_range(ftrace_tramps[i] - ip))
                        return ftrace_tramps[i];
 
        return 0;