summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArd Biesheuvel <ardb@kernel.org>2020-09-14 11:25:29 +0300
committerArd Biesheuvel <ardb@kernel.org>2020-10-28 17:05:40 +0100
commit59d2f2827dfdccf8911d5e51465136b52ba623c4 (patch)
tree2f34648c07b684ddd67f3cb21d5cbfa6c53a411a
parent450abd38fe6c6313ce9bdd9dce81c1dd604f6fb0 (diff)
downloadlinux-59d2f2827dfdccf8911d5e51465136b52ba623c4.tar.gz
linux-59d2f2827dfdccf8911d5e51465136b52ba623c4.tar.bz2
linux-59d2f2827dfdccf8911d5e51465136b52ba623c4.zip
ARM: head: use PC-relative insn sequence for __smp_alt
Now that calling __do_fixup_smp_on_up() can be done without passing the physical-to-virtual offset in r3, we can replace the open coded PC relative offset calculations with a pair of adr_l invocations. This removes some open coded arithmetic involving virtual addresses, avoids literal pools on v7+, and slightly reduces the footprint of the code. Reviewed-by: Nicolas Pitre <nico@fluxnic.net> Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
-rw-r--r--arch/arm/kernel/head.S12
1 files changed, 2 insertions, 10 deletions
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index cdc79fcee43e..5e031a0bf9a9 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -520,19 +520,11 @@ ARM_BE8(rev r0, r0) @ byteswap if big endian
retne lr
__fixup_smp_on_up:
- adr r0, 1f
- ldmia r0, {r3 - r5}
- sub r3, r0, r3
- add r4, r4, r3
- add r5, r5, r3
+ adr_l r4, __smpalt_begin
+ adr_l r5, __smpalt_end
b __do_fixup_smp_on_up
ENDPROC(__fixup_smp)
- .align
-1: .word .
- .word __smpalt_begin
- .word __smpalt_end
-
.pushsection .data
.align 2
.globl smp_on_up