This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 5faf14e41f480230ee5d14a8d3885025894b57e5 Author: Daniel P. Carvalho <[email protected]> AuthorDate: Sun Oct 4 01:08:08 2026 -0300 arch/mips/jz4780: record the running task on interrupt exit. jz4780_decodeirq() saves the interrupted context into g_running_tasks[this_cpu()]->xcp.regs on entry, but nothing updates g_running_tasks[] after a context switch: every interrupt saves the context into the Idle task's TCB, and once a task exits (up_exit() sets the entry to NULL) no context is saved at all and the next context switch restores stale registers. Set g_running_tasks[this_cpu()] to this_task() before returning, as pic32mz_decodeirq() does. This is the same bug that crashed the PIC32MZ-W1 when the netinit thread exited. Assisted-by: Claude Code:claude-opus-5-5 Signed-off-by: Daniel P. Carvalho <[email protected]> --- arch/mips/src/jz4780/jz4780_decodeirq.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/mips/src/jz4780/jz4780_decodeirq.c b/arch/mips/src/jz4780/jz4780_decodeirq.c index 4b26ceaf7c9..feedd978259 100644 --- a/arch/mips/src/jz4780/jz4780_decodeirq.c +++ b/arch/mips/src/jz4780/jz4780_decodeirq.c @@ -36,6 +36,7 @@ #include <nuttx/arch.h> #include <nuttx/board.h> #include <arch/board/board.h> +#include <sched/sched.h> #include "mips_internal.h" #include "jz4780_gpio.h" @@ -151,6 +152,12 @@ uint32_t *jz4780_decodeirq(uint32_t *regs) regs = up_current_regs(); + /* Record the task that will run when the interrupt returns. Its state + * is saved to its TCB on the next interrupt entry (see above). + */ + + *running_task = this_task(); + #if defined(CONFIG_ARCH_FPU) || defined(CONFIG_ARCH_ADDRENV) /* Check for a context switch. If a context switch occurred, then * g_current_regs will have a different value than it did on entry. If an
