[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