mirror of
https://github.com/apache/nuttx.git
synced 2026-05-30 21:36:28 +08:00
arch & sched: task: Fix up_exit() and nxtask_exit() for SMP
Summary: - During repeating ostest with sabre-6quad:smp (QEMU), I noticed that pthread_rwlock_test sometimes stops - Finally, I found that nxtask_exit() released a critical section too early before context switching which resulted in selecting inappropriate TCB - This commit fixes this issue by moving nxsched_resume_scheduler() from nxtask_exit() to up_exit() and also removing spin_setbit() and spin_clrbit() from nxtask_exit() because the caller holds a critical section - To be consistent with non-SMP cases, the above changes were done for all CPU architectures Impact: - This commit affects all CPU architectures regardless of SMP Testing: - Tested with ostest with the following configs - sabre-6quad:smp (QEMU, dev board), sabre-6quad:nsh (QEMU) - spresense:wifi_smp - sim:smp, sim:ostest - maix-bit:smp (QEMU) - esp32-devkitc:smp (QEMU) - lc823450-xgevk:rndis Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
This commit is contained in:
committed by
Xiang Xiao
parent
d5a1c8cae8
commit
ec73a4e69c
@@ -152,6 +152,10 @@ void up_exit(int status)
|
||||
tcb = this_task();
|
||||
sinfo("New Active Task TCB=%p\n", tcb);
|
||||
|
||||
/* Adjusts time slice for SCHED_RR & SCHED_SPORADIC cases */
|
||||
|
||||
nxsched_resume_scheduler(tcb);
|
||||
|
||||
#ifdef CONFIG_ARCH_ADDRENV
|
||||
/* Make sure that the address environment for the previously running
|
||||
* task is closed down gracefully (data caches dump, MMU flushed) and
|
||||
|
||||
Reference in New Issue
Block a user