[PATCH 5/8] ARM: ftrace: avoid unnecessary literal loads

Nick Desaulniers ndesaulniers at google.com
Tue Jan 25 12:27:28 PST 2022


On Tue, Jan 25, 2022 at 7:37 AM Ard Biesheuvel <ardb at kernel.org> wrote:
>
> Avoid explicit literal loads and instead, use accessor macros that
> generate the optimal sequence depending on the architecture revision
> being targeted.
>
> Signed-off-by: Ard Biesheuvel <ardb at kernel.org>

Note to fellow reviewers, Ard pointed out to me that the definition of
ldr_va depends on his vmapped stack series:
https://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git/commit/?h=arm-up-ti-in-task-v4&id=4e918ab13eaf40f19938659cb5a22c93172778a8
("ARM: assembler: add optimized ldr/str macros to load variables from memory")

Reviewed-by: Nick Desaulniers <ndesaulniers at google.com>

> ---
>  arch/arm/kernel/entry-ftrace.S | 27 ++++++++------------
>  1 file changed, 11 insertions(+), 16 deletions(-)
>
> diff --git a/arch/arm/kernel/entry-ftrace.S b/arch/arm/kernel/entry-ftrace.S
> index 67548c38a567..99720064a4c5 100644
> --- a/arch/arm/kernel/entry-ftrace.S
> +++ b/arch/arm/kernel/entry-ftrace.S
> @@ -35,23 +35,20 @@
>
>  .macro __mcount suffix
>         mcount_enter
> -       ldr     r0, =ftrace_trace_function
> -       ldr     r2, [r0]
> +       ldr_va  r2, ftrace_trace_function
>         badr    r0, .Lftrace_stub
>         cmp     r0, r2
>         bne     1f
>
>  #ifdef CONFIG_FUNCTION_GRAPH_TRACER
> -       ldr     r1, =ftrace_graph_return
> -       ldr     r2, [r1]
> -       cmp     r0, r2
> -       bne     ftrace_graph_caller\suffix
> -
> -       ldr     r1, =ftrace_graph_entry
> -       ldr     r2, [r1]
> -       ldr     r0, =ftrace_graph_entry_stub
> -       cmp     r0, r2
> -       bne     ftrace_graph_caller\suffix
> +       ldr_va  r2, ftrace_graph_return
> +       cmp     r0, r2
> +       bne     ftrace_graph_caller\suffix
> +
> +       ldr_va  r2, ftrace_graph_entry
> +       mov_l   r0, ftrace_graph_entry_stub
> +       cmp     r0, r2
> +       bne     ftrace_graph_caller\suffix
>  #endif
>
>         mcount_exit
> @@ -87,8 +84,7 @@
>
>         mov     r3, sp                          @ struct pt_regs*
>
> -       ldr r2, =function_trace_op
> -       ldr r2, [r2]                            @ pointer to the current
> +       ldr_va  r2, function_trace_op           @ pointer to the current
>                                                 @ function tracing op
>
>         ldr     r1, [sp, #S_LR]                 @ lr of instrumented func
> @@ -141,8 +137,7 @@ ftrace_graph_regs_call:
>         mcount_adjust_addr      r0, lr          @ instrumented function
>
>  #ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS
> -       ldr r2, =function_trace_op
> -       ldr r2, [r2]                            @ pointer to the current
> +       ldr_va  r2, function_trace_op           @ pointer to the current
>                                                 @ function tracing op
>         mov r3, #0                              @ regs is NULL
>  #endif
> --
> 2.30.2
>


-- 
Thanks,
~Nick Desaulniers



More information about the linux-arm-kernel mailing list