From a4e93be0fb386b74590cf958458c046b29f5e1e2 Mon Sep 17 00:00:00 2001 From: zhuyanlin Date: Wed, 22 Dec 2021 17:59:57 +0800 Subject: [PATCH] arch:xtensa: fix sp duplicate reduce in handler enter In xtensa/include/irq.h the XCPTCONTEXT_SIZE is `#define XCPTCONTEXT_SIZE ((4 * XCPTCONTEXT_REGS) + 0x20)` XCPTCONTEXT_SIZE is already byte size of xcpcontext Signed-off-by: zhuyanlin --- arch/xtensa/src/common/xtensa_int_handlers.S | 22 ++++++++++---------- arch/xtensa/src/common/xtensa_user_handler.S | 6 +++--- arch/xtensa/src/common/xtensa_vectors.S | 8 +++---- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/arch/xtensa/src/common/xtensa_int_handlers.S b/arch/xtensa/src/common/xtensa_int_handlers.S index 928a9654026..b649e8d0c63 100644 --- a/arch/xtensa/src/common/xtensa_int_handlers.S +++ b/arch/xtensa/src/common/xtensa_int_handlers.S @@ -295,7 +295,7 @@ g_intstacktop: _xtensa_level1_handler: mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, PS /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -399,7 +399,7 @@ _xtensa_level1_handler: _xtensa_level2_handler: mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_2 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -478,7 +478,7 @@ _xtensa_level2_handler: _xtensa_level3_handler: mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_3 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -557,7 +557,7 @@ _xtensa_level3_handler: _xtensa_level4_handler: mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_4 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -636,7 +636,7 @@ _xtensa_level4_handler: _xtensa_level5_handler: mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_5 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -715,7 +715,7 @@ _xtensa_level5_handler: _xtensa_level6_handler: mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_6 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -833,7 +833,7 @@ _xtensa_level2_handler: /* For now, just panic */ mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_2 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -867,7 +867,7 @@ _xtensa_level3_handler: /* For now, just panic */ mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_3 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -903,7 +903,7 @@ _xtensa_level4_handler: /* For now, just panic */ mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_4 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -939,7 +939,7 @@ _xtensa_level5_handler: /* For now, just panic */ mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_5 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -975,7 +975,7 @@ _xtensa_level6_handler: /* For now, just panic */ mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS_6 /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) diff --git a/arch/xtensa/src/common/xtensa_user_handler.S b/arch/xtensa/src/common/xtensa_user_handler.S index 190d5098c78..fd04c6fbd7a 100644 --- a/arch/xtensa/src/common/xtensa_user_handler.S +++ b/arch/xtensa/src/common/xtensa_user_handler.S @@ -210,7 +210,7 @@ _xtensa_user_handler: /* Allocate exception frame and save minimal context. */ mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, PS /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -332,7 +332,7 @@ _xtensa_syscall_handler: /* Allocate stack frame and save A0, A1, and PS */ mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, PS /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -505,7 +505,7 @@ _xtensa_coproc_handler: /* For now, just panic */ mov a0, sp /* Save SP in A0 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, PS /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) diff --git a/arch/xtensa/src/common/xtensa_vectors.S b/arch/xtensa/src/common/xtensa_vectors.S index 238f5da30b1..e0ef459b01c 100644 --- a/arch/xtensa/src/common/xtensa_vectors.S +++ b/arch/xtensa/src/common/xtensa_vectors.S @@ -193,7 +193,7 @@ _xtensa_nmi_vector: wsr a0, EXCSAVE + XCHAL_NMILEVEL /* Preserve a0 */ mov a0, sp /* sp == a1 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS + XCHAL_NMILEVEL /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -235,7 +235,7 @@ _xtensa_nmi_vector: _debug_exception_vector: wsr a0, EXCSAVE + XCHAL_DEBUGLEVEL /* Preserve a0 */ mov a0, sp /* sp == a1 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, EPS + XCHAL_DEBUGLEVEL /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS) @@ -276,7 +276,7 @@ _double_exception_vector: wsr a0, EXCSAVE_1 /* Preserve a0 */ mov a0, sp /* sp == a1 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, PS /* Save interruptee's PS -- REVISIT */ s32i a0, sp, (4 * REG_PS) @@ -320,7 +320,7 @@ _kernel_exception_vector: wsr a0, EXCSAVE_1 /* Preserve a0 */ mov a0, sp /* sp == a1 */ - addi sp, sp, -(4 * XCPTCONTEXT_SIZE) /* Allocate interrupt stack frame */ + addi sp, sp, -XCPTCONTEXT_SIZE /* Allocate interrupt stack frame */ s32i a0, sp, (4 * REG_A1) /* Save pre-interrupt SP */ rsr a0, PS /* Save interruptee's PS */ s32i a0, sp, (4 * REG_PS)