On Fri, 11 Aug 2017, Ard Biesheuvel wrote: > On 11 August 2017 at 16:13, Tony Lindgren <tony@xxxxxxxxxxx> wrote: > > * Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx> [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@xxxxxxxxxx> > >> --- > >> 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. Nicolas