2241969e5a
cpu0 thread0: cpu1: sched_yield() nxsched_set_priority() nxsched_running_setpriority() nxsched_reprioritize_rtr() nxsched_add_readytorun() up_cpu_pause() IRQ enter arm64_pause_handler() enter_critical_section() begin up_cpu_paused() pick thread0 arm64_restorestate() set thread0 tcb->xcp.regs to CURRENT_REGS up_switch_context() thread0 -> thread1 arm64_syscall() case SYS_switch_context change thread0 tcb->xcp.regs restore_critical_section() enter_critical_section() done leave_critical_section() IRQ leave with restore CURRENT_REGS ERROR !!! Reason: As descript above, cpu0 swith task: thread0 -> thread1, and the syscall() execute slowly, this time cpu1 pick thread0 to run at up_cpu_paused(). Then cpu0 syscall execute, cpu1 IRQ leave error. Resolve: Move arm64_restorestate() after enter_critical_section() done This is a continued fix with: https://github.com/apache/nuttx/pull/6833 Signed-off-by: ligd <liguiding1@xiaomi.com> |
||
---|---|---|
.. | ||
addrenv | ||
clock | ||
environ | ||
group | ||
init | ||
instrument | ||
irq | ||
misc | ||
module | ||
mqueue | ||
paging | ||
pthread | ||
sched | ||
semaphore | ||
signal | ||
task | ||
timer | ||
tls | ||
wdog | ||
wqueue | ||
CMakeLists.txt | ||
Kconfig | ||
Makefile |