nuttx/sched
hujun5 508c5889d7 sched: change nxsched_islocked_global to nxsched_islocked_tcb
reason:
1 To improve efficiency, we mimic Linux's behavior where preemption disabling is only applicable to the current CPU and does not affect other CPUs.
2 In the future, we will implement "spinlock+sched_lock", and use it extensively. Under such circumstances, if preemption is still globally disabled, it will seriously impact the scheduling efficiency.
3 We have removed g_cpu_lockset and used irqcount in order to eliminate the dependency of schedlock on critical sections in the future, simplify the logic, and further enhance the performance of sched_lock.
4 We set lockcount to 1 in order to lock scheduling on all CPUs during startup, without the need to provide additional functions to disable scheduling on other CPUs.
5 Cpu1~n must wait for cpu0 to enter the idle state before enabling scheduling because it prevents CPUs1~n from competing with cpu0 for the memory manager mutex, which could cause the cpu0 idle task to enter a wait state and trigger an assert.

size nuttx
before:
   text    data     bss     dec     hex filename
 265396   51057   63646  380099   5ccc3 nuttx
after:
   text    data     bss     dec     hex filename
 265184   51057   63642  379883   5cbeb nuttx

size -216

Configuring NuttX and compile:
$ ./tools/configure.sh -l qemu-armv8a:nsh_smp
$ make
Running with qemu
$ qemu-system-aarch64 -cpu cortex-a53 -smp 4 -nographic \
   -machine virt,virtualization=on,gic-version=3 \
   -net none -chardev stdio,id=con,mux=on -serial chardev:con \
   -mon chardev=con,mode=readline -kernel ./nuttx

Signed-off-by: hujun5 <hujun5@xiaomi.com>
2024-10-10 17:57:30 +08:00
..
addrenv sched: migrate to SPDX identifier 2024-09-12 01:10:14 +08:00
clock Make each function of SCHED_CRITMONITOR independent 2024-09-19 03:16:14 +08:00
environ sched: migrate to SPDX identifier 2024-09-12 01:10:14 +08:00
event sched: migrate to SPDX identifier 2024-09-12 01:10:14 +08:00
group sched: migrate to SPDX identifier 2024-09-12 01:10:14 +08:00
init sched: change nxsched_islocked_global to nxsched_islocked_tcb 2024-10-10 17:57:30 +08:00
instrument sched: migrate to SPDX identifier 2024-09-12 01:10:14 +08:00
irq critmonitor: add caller support 2024-09-19 03:16:14 +08:00
misc fs/dump: correct SCHED_DUMP_ON_EXIT to DUMP_ON_EXIT 2024-09-18 23:48:31 +08:00
module modlib/dlfcn:unify same code 2024-10-08 23:51:33 +08:00
mqueue sched: add nxsched_remove_self 2024-10-09 18:19:13 +08:00
paging sched: add nxsched_remove_self 2024-10-09 18:19:13 +08:00
pthread pthread_mutex:add deadlock assert 2024-09-20 22:05:29 +08:00
sched sched: change nxsched_islocked_global to nxsched_islocked_tcb 2024-10-10 17:57:30 +08:00
semaphore sched: add nxsched_remove_self 2024-10-09 18:19:13 +08:00
signal sched: add nxsched_remove_self 2024-10-09 18:19:13 +08:00
task sched: change nxsched_islocked_global to nxsched_islocked_tcb 2024-10-10 17:57:30 +08:00
timer sched/signal: Simplified Implementation for SIGEV_THREAD_TID. 2024-09-23 12:29:36 +08:00
tls sched: migrate to SPDX identifier 2024-09-12 01:10:14 +08:00
wdog wdog: rename wd_start_absolute() to wd_start_abstick() 2024-09-17 12:15:14 +08:00
wqueue sched/wqueue: Fix unexpected dq entry status 2024-09-17 02:56:39 +08:00
CMakeLists.txt sched: migrate to SPDX identifier 2024-09-12 01:10:14 +08:00
Kconfig sched: move DUMP_ON_EXIT to sched 2024-09-19 03:49:12 +08:00
Makefile Revert "build depend:Revert Make.dep intermediate ddc file" 2024-09-15 19:29:47 +08:00