[PATCH 05/15] ARM: head: use PC-relative insn sequence for __smp_alt
Ard Biesheuvel
ard.biesheuvel at linaro.org
Fri Aug 11 12:37:00 PDT 2017
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. The change is so simple that it is difficult
to reduce it in parts, but if you still have the time to spare, mind
trying the diff below?
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index 6e9df3663a57..c0361e608210 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -524,17 +524,15 @@ ARM_BE8(rev r0, r0) @
byteswap if big endian
__fixup_smp_on_up:
adr r0, 1f
- ldmia r0, {r3 - r5}
- sub r3, r0, r3
- add r4, r4, r3
- add r5, r5, r3
+ ldmia r0, {r4 - r5}
+ add r4, r4, r0
+ add r5, r5, r0
b __do_fixup_smp_on_up
ENDPROC(__fixup_smp)
.align
-1: .word .
- .word __smpalt_begin
- .word __smpalt_end
+1: .word __smpalt_begin - 1b
+ .word __smpalt_end - 1b
.pushsection .data
.globl smp_on_up
The main point of these changes is to eliminate absolute references,
not to use the new macros, so if this does work, I will go with this
instead.
More information about the linux-arm-kernel
mailing list