ARM: head: use PC-relative insn sequence for __smp_alt
authorArd Biesheuvel <ardb@kernel.org>
Mon, 14 Sep 2020 08:25:29 +0000 (11:25 +0300)
committerArd Biesheuvel <ardb@kernel.org>
Wed, 28 Oct 2020 16:05:40 +0000 (17:05 +0100)
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>
arch/arm/kernel/head.S

index cdc79fc..5e031a0 100644 (file)
@@ -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