This is an automated email from the ASF dual-hosted git repository. masayuki pushed a commit to branch releases/10.0 in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/releases/10.0 by this push: new 9532546 arch/armv7-a: Fix the wrong idle stack setup for SMP case 9532546 is described below commit 95325460b1a71bad9602fe2f9e63c2b73cf289ac Author: Xiang Xiao <xiaoxi...@xiaomi.com> AuthorDate: Sun Oct 18 21:33:12 2020 +0800 arch/armv7-a: Fix the wrong idle stack setup for SMP case 1.Get the stack pointer from sp instead of .Lstkinit's field 2.Make g_idle_topstack point to the end of the idle stack Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com> --- arch/arm/src/armv7-a/arm_cpuhead.S | 14 +++----------- arch/arm/src/armv7-a/arm_head.S | 8 ++++++-- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/arch/arm/src/armv7-a/arm_cpuhead.S b/arch/arm/src/armv7-a/arm_cpuhead.S index 5edb150..eb19627 100644 --- a/arch/arm/src/armv7-a/arm_cpuhead.S +++ b/arch/arm/src/armv7-a/arm_cpuhead.S @@ -420,12 +420,13 @@ __cpu3_start: */ adr r3, .Lstkinit - ldmia r3, {r0, r1, r2} /* R0 = start of IDLE stack; R1 = Size of stack; R2 = coloration */ + mov r0, sp /* R0 = end of IDLE stack */ + ldmia r3, {r1, r2} /* R1 = Size of stack; R2 = coloration */ 1: /* Top of the loop */ sub r1, r1, #1 /* R1 = Number of words remaining */ cmp r1, #0 /* Check (nwords == 0) */ - str r2, [r0], #4 /* Save stack color word, increment stack address */ + str r2, [r0, #-4]! /* Save stack color word, increment stack address */ bne 1b /* Bottom of the loop */ #endif @@ -494,14 +495,5 @@ g_cpu3_idlestack: #endif /* CONFIG_SMP_NCPUS > 3 */ #endif /* CONFIG_SMP_NCPUS > 2 */ #endif /* CONFIG_SMP_NCPUS > 1 */ - - .align 8 - .globl g_idle_topstack - .type g_idle_topstack, object - -g_idle_topstack: - .long _enoinit - .size g_idle_topstack, .-g_idle_topstack - #endif /* CONFIG_SMP */ .end diff --git a/arch/arm/src/armv7-a/arm_head.S b/arch/arm/src/armv7-a/arm_head.S index 8f80573..6025f6d 100644 --- a/arch/arm/src/armv7-a/arm_head.S +++ b/arch/arm/src/armv7-a/arm_head.S @@ -754,6 +754,8 @@ arm_data_initialize: .Lstackpointer: #ifdef CONFIG_BOOT_SDRAM_DATA .long IDLE_STACK_VBASE+CONFIG_IDLETHREAD_STACKSIZE-4 +#elif defined(CONFIG_SMP) + .long _enoinit+CONFIG_IDLETHREAD_STACKSIZE-4 #else .long _ebss+CONFIG_IDLETHREAD_STACKSIZE-4 #endif @@ -773,6 +775,8 @@ arm_data_initialize: .Lstkinit: #ifdef CONFIG_BOOT_SDRAM_DATA .long IDLE_STACK_VBASE /* Beginning of the IDLE stack, then words of IDLE stack */ +#elif defined(CONFIG_SMP) + .long _enoinit #else .long _ebss /* Beginning of the IDLE stack, then words of IDLE stack */ #endif @@ -785,7 +789,6 @@ arm_data_initialize: * Data section variables ***************************************************************************/ -#ifndef CONFIG_SMP /* This global variable is unsigned long g_idle_topstack and is * exported from here only because of its coupling to .Linitparms * above. @@ -800,10 +803,11 @@ g_idle_topstack: #ifdef CONFIG_BOOT_SDRAM_DATA .long IDLE_STACK_VBASE+CONFIG_IDLETHREAD_STACKSIZE +#elif defined(CONFIG_SMP) + .long _enoinit+CONFIG_IDLETHREAD_STACKSIZE #else .long _ebss+CONFIG_IDLETHREAD_STACKSIZE #endif .size g_idle_topstack, .-g_idle_topstack -#endif .end #endif