[PATCH 05/15] ARM: head: use PC-relative insn sequence for __smp_alt
Ard Biesheuvel
ard.biesheuvel at linaro.org
Fri Aug 11 13:01:48 PDT 2017
On 11 August 2017 at 20:58, Nicolas Pitre <nicolas.pitre at linaro.org> wrote:
> On Fri, 11 Aug 2017, Ard Biesheuvel wrote:
>
>> On 11 August 2017 at 16:13, Tony Lindgren <tony at atomide.com> wrote:
>> > * Ard Biesheuvel <ard.biesheuvel at linaro.org> [170805 13:54]:
>> >> Replace the open coded PC relative offset calculations with a pair
>> >> of adr_l invocations.
>> >>
>> >> Signed-off-by: Ard Biesheuvel <ard.biesheuvel at linaro.org>
>> >> ---
>> >> arch/arm/kernel/head.S | 12 ++----------
>> >> 1 file changed, 2 insertions(+), 10 deletions(-)
>> >>
>> >> diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
>> >> index 6e9df3663a57..aed341e0f530 100644
>> >> --- a/arch/arm/kernel/head.S
>> >> +++ b/arch/arm/kernel/head.S
>> >> @@ -523,19 +523,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
>> >> .globl smp_on_up
>> >> smp_on_up:
>> >
>> > Ard, it's this one that cause boot to fail on omap3.
>> > The rest of your set works for me with just this one
>> > left out.
>> >
>>
>> I'm completely puzzled.
>
> Found it.
>
> You replaced:
>
> - 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
>
> Notice that r3 is now uninitialized.
>
> Now have a look at the code for __do_fixup_smp_on_up.
>
I still don't see it :-)
__do_fixup_smp_on_up() mentions r3 in the comment block, but it does
not actually refer to it in the code, does it?
More information about the linux-arm-kernel
mailing list