On Fri, 11 Aug 2017, Ard Biesheuvel wrote: > On 11 August 2017 at 21:06, Nicolas Pitre <nicolas.pitre@xxxxxxxxxx> wrote: > > On Fri, 11 Aug 2017, Ard Biesheuvel wrote: > > > >> On 11 August 2017 at 20:58, Nicolas Pitre <nicolas.pitre@xxxxxxxxxx> wrote: > >> > 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. > >> > > >> > >> 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? > > > > __do_fixup_smp_on_up: > > cmp r4, r5 > > reths lr > > ldmia r4!, {r0, r6} > > ARM( str r6, [r0, r3] ) <<============ > > THUMB( add r0, r0, r3 ) <<============ > > [...] > > > > Aahhh > > Looking at the wrong version of the file. > > Thanks for spotting that. No problem. Can't attribute that to my sharp eyes though. :-) Nicolas