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> |
||
---|---|---|
.. | ||
android | ||
arpa | ||
crypto | ||
cxx | ||
net | ||
netinet | ||
netpacket | ||
nuttx | ||
ssp | ||
sys | ||
.gitignore | ||
aio.h | ||
alloca.h | ||
assert.h | ||
byteswap.h | ||
ctype.h | ||
debug.h | ||
dirent.h | ||
dlfcn.h | ||
dsp.h | ||
dspb16.h | ||
elf32.h | ||
elf64.h | ||
elf.h | ||
endian.h | ||
err.h | ||
errno.h | ||
execinfo.h | ||
fcntl.h | ||
fixedmath.h | ||
fnmatch.h | ||
ftw.h | ||
getopt.h | ||
glob.h | ||
grp.h | ||
hex2bin.h | ||
iconv.h | ||
ifaddrs.h | ||
inttypes.h | ||
iso646.h | ||
langinfo.h | ||
libgen.h | ||
libintl.h | ||
limits.h | ||
locale.h | ||
lzf.h | ||
malloc.h | ||
mqueue.h | ||
netdb.h | ||
nl_types.h | ||
nxflat.h | ||
obstack.h | ||
poll.h | ||
pthread.h | ||
pty.h | ||
pwd.h | ||
regex.h | ||
resolv.h | ||
sched.h | ||
search.h | ||
semaphore.h | ||
signal.h | ||
spawn.h | ||
stdbool.h | ||
stddef.h | ||
stdint.h | ||
stdio.h | ||
stdlib.h | ||
stdnoreturn.h | ||
string.h | ||
strings.h | ||
syscall.h | ||
syslog.h | ||
termios.h | ||
threads.h | ||
time.h | ||
unistd.h | ||
utime.h | ||
uuid.h | ||
wchar.h | ||
wctype.h |