diff mbox series

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

Message ID 20220125153656.1802079-6-ardb@kernel.org (mailing list archive)
State New, archived
Headers show
Series ARM: ftrace fixes and cleanups | expand

Commit Message

Ard Biesheuvel Jan. 25, 2022, 3:36 p.m. UTC
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@kernel.org>
---
 arch/arm/kernel/entry-ftrace.S | 27 ++++++++------------
 1 file changed, 11 insertions(+), 16 deletions(-)

Comments

Nick Desaulniers Jan. 25, 2022, 8:27 p.m. UTC | #1
On Tue, Jan 25, 2022 at 7:37 AM Ard Biesheuvel <ardb@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@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@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
>
diff mbox series

Patch

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