[PATCH] ARM: v7-M: Fix the stack set by __v7m_setup

Ezequiel Garcia ezequiel at vanguardiasur.com.ar
Thu Oct 29 11:54:22 PDT 2015


On 29 October 2015 at 15:41, Uwe Kleine-König
<u.kleine-koenig at pengutronix.de> wrote:
> Hello,
>
> On Thu, Oct 29, 2015 at 02:31:20PM -0300, Ezequiel Garcia wrote:
>> On ARM v7-M, when PROCINFO_INITFUNC (__v7m_setup) is called,
>> a stack is needed before calling the supervisor call (SVC),
>> which is used by the supervisor call to save the context.
>>
>> Currently, __v7m_setup() prepares a temporary stack in the .text.init
>> section, which is is broken if the kernel is executing directly from
>> read-only memory.
>>
>> This commit fixes this by seting an early stack to its usual location.
>>
>> Also, __v7m_setup() is currently saving and restoring the previous
>> stack. That was bogus, because there's no stack previously set,
>> so this commit removes it.
>
> Maybe add something like:
>
>         This fixes booting on my $somedetails machine which throws an
>         exception when a write to ROM is done.
>
>> Signed-off-by: Ezequiel Garcia <ezequiel at vanguardiasur.com.ar>
>> ---
>> As suggested by Uwe, this commit tries to set a proper stack
>> before calling the SVC in __v7m_setup.
>>
>> Instead of putting that in a .data section, I'm just using
>> the usual stack location.
>>
>> The stack will be reset to the same place in __mmap_switched.
>> This means the stack is set twice in the v7-M case, but
>> for simplicity I figure we can just leave this that way.
>
> That's ok I think, yes.
>
>>  arch/arm/mm/proc-v7m.S | 14 +++++---------
>>  1 file changed, 5 insertions(+), 9 deletions(-)
>>
>> diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S
>> index 67d9209077c6..f42d4e2774c7 100644
>> --- a/arch/arm/mm/proc-v7m.S
>> +++ b/arch/arm/mm/proc-v7m.S
>> @@ -12,6 +12,7 @@
>>   */
>>  #include <linux/linkage.h>
>>  #include <asm/assembler.h>
>> +#include <asm/memory.h>
>>  #include <asm/v7m.h>
>>  #include "proc-macros.S"
>>
>> @@ -97,19 +98,19 @@ __v7m_setup:
>>       mov     r5, #0x00800000
>>       str     r5, [r0, V7M_SCB_SHPR3] @ set PendSV priority
>>
>> -     @ SVC to run the kernel in this mode
>> +     @ SVC to run the kernel in this mode,
> Do you consider this understandable? What is "this"? I suggest to change
> it to
>
>         @ SVC to switch to handler mode, notice that this requires sp to
>         @ point to writeable memory because the processor saves
>         @ some registers to the stack.
>

OK, sounds good.

>> +     @ notice that we need to set a stack for SVC to save
>> +     @ the context.
>
> Other than that:
>
> Acked-by: Uwe Kleine-König <u.kleine-koenig at pengutronix.de>
>

Cool, thanks!
-- 
Ezequiel García, VanguardiaSur
www.vanguardiasur.com.ar



More information about the linux-arm-kernel mailing list