From 2923fd5265f0378157dc9be1a6eb4db32d36fdfc Mon Sep 17 00:00:00 2001 From: Alexey Lapshin Date: Tue, 12 Sep 2023 21:15:09 +0400 Subject: [PATCH] fix(xtensa): fix registers curruption on context switch a6, a7 registers may be corrupted on multicore ESP chips while FreeRTOS Kernel SMP context switch --- components/freertos/port/xtensa/xtensa_vectors.S | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/freertos/port/xtensa/xtensa_vectors.S b/components/freertos/port/xtensa/xtensa_vectors.S index f38c71269f..55be567838 100644 --- a/components/freertos/port/xtensa/xtensa_vectors.S +++ b/components/freertos/port/xtensa/xtensa_vectors.S @@ -1041,13 +1041,17 @@ locking. bnone a2, a0, .L_xt_coproc_done /* if no match then done */ and a2, a2, a0 /* a2 = which CPs to restore */ extui a2, a2, 0, 8 /* extract low 8 bits */ +#if portNUM_PROCESSORS == 1 s32i a6, sp, XT_STK_A6 /* save extra needed regs */ s32i a7, sp, XT_STK_A7 +#endif /* portNUM_PROCESSORS == 1 */ s32i a13, sp, XT_STK_A13 s32i a14, sp, XT_STK_A14 call0 _xt_coproc_restorecs /* restore CP registers */ +#if portNUM_PROCESSORS == 1 l32i a6, sp, XT_STK_A6 /* restore saved registers */ l32i a7, sp, XT_STK_A7 +#endif /* portNUM_PROCESSORS == 1 */ l32i a13, sp, XT_STK_A13 l32i a14, sp, XT_STK_A14 j .L_xt_coproc_done