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

Uwe Kleine-König u.kleine-koenig at pengutronix.de
Thu Oct 29 11:41:27 PDT 2015


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.

> +	@ 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>

Thanks
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |



More information about the linux-arm-kernel mailing list