Commit graph

3045 commits

Author SHA1 Message Date
chao an
10fd309452 sched/signal: Remove shadow definitions to reduce unnecessary API
Reduce unnecessary API definitions:

nxsig_waitinfo() -> nxsig_timedwait()

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-10-14 17:40:18 +08:00
wangchengdong
07a470f696 sched: Improve nxsched stack overflow checking implementation
1. Remove STACKCHECK_SOFTWARE config,
   2. Do sp value checking when STACKCHECK_MARGIN == 0,
   3. Do margin-based stack check when STACKCHECK_MARGIN > 0,
   4. Disable stack check when STACKCHECK_MARGIN == -1

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-10-11 18:00:44 +08:00
chao an
4c7deedd27 sched/clock: remove return value of clock_systime_timespec()
clock_systime_timespec() always returns 0, so there is no need to
check the return value in the caller code, let us remove the return
value directly.

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-10-10 23:15:27 +08:00
chao an
09247c113a sched/clock: remove unused function clock_dow() (dow:day of week)
1. This file is not included in the makefile.
2. This feature should be replaced with mktime().

Signed-off-by: chao an <anchao.archer@bytedance.com>
2025-10-09 15:07:35 -03:00
wangchengdong
08050f506c sched/wdog: remove unnecessary list_node redefinition
The wdog implementation redefined `list_node`, which could cause
  conflicts or unexpected behavior when both `wdog/wdog.h` and
  `list.h` are included in the same source file. This patch removes
  the redundant definition to avoid such issues.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-10-09 11:41:32 +08:00
p-szafonimateusz
0c9d0b3f84 sched/sig_pending: sigpending() should return caller pending signals only
Previously sigpending() returned all pending signals in the group, which is not
POSIX compliant. It should return signals pending only for the caller, so
a signal send with pthread_kill() intended for another thread should not be
returned (it's not pending for a caller).

This fixes the pthread_create.c/test9 test case from
PSE52 Open Group Threads Test Suite.

Signed-off-by: p-szafonimateusz <p-szafonimateusz@xiaomi.com>
2025-09-30 16:15:49 -04:00
guoshengyuan1
b2a69ba781 sched: merge nxsched_suspend/resume_critmon
Merge suspend and resume into one switch to optimize performance

Co-authored-by: yinshengkai <yinshengkai@xiaomi.com>
Signed-off-by: guoshengyuan1 <guoshengyuan1@xiaomi.com>
2025-09-30 23:26:28 +08:00
guoshengyuan1
c62861d383 sched: remove nxsched_suspend/resume_scheduler
move both suspned and resume logic to nxsched_switch_context

Co-authored-by: yinshengkai <yinshengkai@xiaomi.com>
Signed-off-by: guoshengyuan1 <guoshengyuan1@xiaomi.com>
2025-09-30 23:26:28 +08:00
guoshengyuan1
ca7608c2ac sched/irq: add a check for the interrupt stack in irq_dispatch
After irq_dispatch finished, the interrupt stack will be checked to
determine whether overflow occurs.
The relevant configuration reuses the configuration of stack overflow
detection during context switching.

Signed-off-by: guoshengyuan1 <guoshengyuan1@xiaomi.com>
2025-09-29 19:12:18 +08:00
Matteo Golin
504ec6b2c6 arch/udelay: Make common, weak definition of up_*delay functions
Many different architectures re-implemented the exact same code for
`up_*delay` because it was originally written as architecture dependent
code. Busy-waiting can be done regardless of architecture, so this
commit moves that duplicated implementation to a common file with weak
definitions so that individual architectures (see tc32) are still able
to override the definition if needed/desired.

Default implementation is not included if ARCH_TIMER is enabled, since
it is more accurate and provides its own weak definitions to override.

Signed-off-by: Matteo Golin <matteo.golin@gmail.com>
2025-09-29 09:22:56 +08:00
guoshengyuan1
5d7ac216f2 arch: optimize up_check_tcbstack for stack overflow detection
Many times, context switching does not occur when the thread stack
memory is almost exhausted, so we need to mofify up_check_tcbstack to
accurately detect it.

Co-authored-by: Chengdong Wang <wangchengdong@lixiang.com>
Signed-off-by: guoshengyuan1 <guoshengyuan1@xiaomi.com>
2025-09-27 12:56:11 +08:00
guoshengyuan1
6f478a9e25 sched: detecting stack overflow during context switching
Added two detection methods:

1. Determine by detecting the number of bytes specified at the bottom of the stack.
2. Check if the `sp` register is out of bounds.

Co-authored-by: Chengdong Wang <wangchengdong@lixiang.com>
Signed-off-by: guoshengyuan1 <guoshengyuan1@xiaomi.com>
2025-09-27 12:56:11 +08:00
guoshengyuan1
fc15b8da8a arch: unify the scheduling information of task_exit
Replace all nxsched_suspend/resume_*** with nxsched_switch_context

Delete nxsched_resume_scheduler in up_exit and call it uniformly in task_exit

Co-authored-by: yinshengkai <yinshengkai@xiaomi.com>
Signed-off-by: guoshengyuan1 <guoshengyuan1@xiaomi.com>
2025-09-25 16:40:23 +08:00
wangchengdong
fc09640b28 sched/event: add nxevent_getmask api
In certain cases, when the event-wait thread is awakened,
  it needs to know the specific mask bit that triggered it,
  so that it can branch to different paths accordingly.
  This patch introduces the nxevent_getmask function to address this requirement.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-09-09 11:07:49 -03:00
wangchengdong
c0d7269840 sched/event: fix event bug after csection was removed
Change:
    Replace list_delete_init() with list_delete() in nxevent_post.
  Reason:
    PR 16933 removed list_delete() in nxevent_wait() and  allow other task
    to preempt event-wait thread after list_add_tail() option,  the even-post thread
    can preempt it at this time and do  list_delete_init().

    The problem is that list_delete_init() will make  list_in_list() return true, so
    DEBUGASSERT(!list_in_list(&(wait->node))); will fail in nxevent_wait() after the event-wait thread
    returns.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-09-09 15:45:48 +08:00
wangchengdong
cac1cc896a sched/event: add nxevent_clear api
Add nxevent_clear to clear event mask to an event object.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-09-08 19:48:35 +08:00
hujun5
4cea148088 sched: remove csection in event
We hope to replace the large lock with a small lock to improve concurrency performance.

Signed-off-by: hujun5 <hujun5@xiaomi.com>
2025-09-05 14:20:04 +08:00
wangchengdong
7d0fb9d34f sched/semaphore: add support to customize semaphore max allowed value
Curernt implementation default semaphore max allowed value to SEM_VALUE_MAX.
  In some cases, user may want to change this, so provide a function to do this: sem_setmaxvalue

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-09-04 09:48:34 +08:00
wangchengdong
5676bf8227 sched/event: add a new event function nxevent_tickwait_wait
There are cases that users do not want the event wait object to be allocated automatically
  in the stack as a temporary varialbe in nxevent_tickwait, since multiple threads will
  access the varialbe, they want to allocate the object as a global variable for safety
  control or easy debug. To solve this problem, this patch add a new function nxevent_tickwait_wait
  implementation to give user the chance to  pass the global wait object to it.

Signed-off-by: Chengdong Wang <wangchengdong@lixiang.com>
2025-09-04 09:47:50 +08:00
Jukka Laitinen
a030e3c8cc sched/signal/sig_dispatch.c: Simplify the nxsig_dispatch
The nxsig_dispatch should just deliver the signal to either a
thread by pid (tid) or to the process (group) by pid.

Simplify the code so that the intent is more obvious.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-09-02 14:56:35 +08:00
Jukka Laitinen
a0caa5cd96 sched/signal/sig_dispatch.c: Correct signal dispatch to specific thread
The signal dispatch is called from interrupt handlers as well, so
this_task() is wrong. The thread to which the signal is supposed to
be delivered is known (stcb), use that.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-09-02 14:56:35 +08:00
wangchengdong
3430ad2e1c sched/init/nx_bringup.c: Add support for CONFIG_INIT_NONE in a flat build
In a flat build, a separate init thread should not be mandatory,
users can create a user task in the board early initialization or late initialization hook.
2025-08-31 18:38:36 +08:00
wangjianyu3
b9203c1747 sched/signal: Old signal action need save sa_user
For example, set sigaction after create signalfd,
the sa_sigaction was restored but sa_user not,
causing signalfd_action() get the wild private data.

Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
2025-08-28 21:52:44 +08:00
p-szafonimateusz
8108aad1a4 pthread: add pthread_attr_{get|set}guardsize support
This commit adds simple implementation of guardsize for pthreads.
At this moment this option simply increases the size of allocated pthread stack.

At default pthread guard size is set to 0.

Signed-off-by: p-szafonimateusz <p-szafonimateusz@xiaomi.com>
2025-08-22 20:50:13 +08:00
Jukka Laitinen
0dbbce3a8f sched: Remove unnecessary affinity restriction & restoration over smp calls
When the task has TCB_FLAG_CPU_LOCKED it is locked to the CPU regardless
of the affinity. There is no need to switch the affinity back and forth.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-08-20 10:16:43 +08:00
Jukka Laitinen
4cc384757b sched: Change SMP list "g_assignedtasks" to a vector
Since g_assignedtasks only holds the running task for each CPU, it can
be just a vector. Idle tasks are already preserved in statically allocated
structures "g_idletcb", and can be used from there.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-08-20 10:16:43 +08:00
Jukka Laitinen
142f32121a sched: Remove pending list for CONFIG_SMP
This fixes several places, where the sched erroneously checks if the scheduling
is locked on current cpu/task, when it should check if the scheduling is locked
on the target cpu/task.

The original code randomly caused a task to be added to the pending list, and never
taken out from there, leading to system halt.

For SMP, there is no need for the pending list. Each CPU has got it's own
running list (assigned tasks list), and pending tasks can just be kept in
the unassigned (readytorun) list.

In addition, the smp scheduling is changed in a way that every CPU just picks
up the tasks from the ready-to-run list themselves. Which task to pick is
not tried to be dictated by another CPU.

This also allows using up_send_smp_sched for asynchronously
- re-prioritizing a running task
- triggering round robin scheduling switch

Iow, no separate smp call mechanism is needed for those and the code can be simplified.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-08-20 10:16:43 +08:00
Jukka Laitinen
3e29996d97 sched: After nxsched_add_readytorun, change first parameter to up_switch_context to this_task()
Change every occurence of up_switch_context to use this_task() as the first parameter.

"nxsched_add_readytorun" returns "true" if context switch is required. "nxsched_add_readytorun"
typically could only switch the assigned/running task to the one which is passed in as parameter.
But this is not strictly guaranteed in SMP; if other CPUs tweak with affinities or priorities,
it may be possible that the running task after the call is changed, but is some other
task from the readytorun list (and it should be, if there is higher priority one available or the
affinity of the added task prevents it to be scheduled in, but the previous head of the readytorun
list should run.

this_task() is always the correct one to switch to, since it always points to the tcb which was
just switched in by the nxsched_add_readytorun.

This is also a precursor to re-writing the SMP queue logic to remove pending lists for SMP.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-08-20 10:16:43 +08:00
Jukka Laitinen
f55e6f6383 sched: Remove race condition in sched_unlock
When exiting schedlock, that task should first take the critical section and
only after that decrease the lockcount to 0. Otherwise an interrupt might
cause a re-schedule before the task enters the critical section, which makes
the following code meaningless.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-08-20 10:16:43 +08:00
Niccolò Maggioni
571447bb06 coredump: Fix missing loglevel to logmask conversion.
The current setlogmask call used in coredump_dump_syslog specifies a raw log level
instead of a bitmask, and this causes wrong evaluations later on when that value
is checked against a mask. Therefore the LOG_UPTO macro is added for conversion.

Signed-off-by: Niccolò Maggioni <nicco.maggioni+nuttx@gmail.com>
2025-07-08 21:14:07 +08:00
guohao15
57d83907dd bugfix: share kernel thread group should not dup files from caller group
after this commits
  commit e7fa4cae6cbf567266985c8072db1f51ad480943
  Author: Yanfeng Liu <yfliu2008@qq.com>
  Date: Fri May 17 06:11:52 2024 +0800

  sched/tcb: use shared group for kthreads

all kernel thread share group idle
and should not dup filelist to this group

Signed-off-by: guohao15 <guohao15@xiaomi.com>
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
2025-06-27 21:45:33 +08:00
wangmingrong1
bdd3869d26 debug/0 address: Add 0 address access panic configuration
Implemented using up_debugpoint_add

Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
2025-06-26 19:25:31 +08:00
ouyangxiangzhen
0717928b0e spinlock: Fix compilation error with atomic.h.
This commit fixed compilation error with atomic.h included.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-06-25 22:13:00 +08:00
Lingao Meng
6c1020204a sched: assert: Print Stack pointer value when not within the stack
When Stack pointer value not within the stack, the default methon ignored,
while will be discard this information for debug.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2025-06-20 09:51:39 +08:00
ouyangxiangzhen
a0aa654c70 sched/wqueue: Fix windows compilation errors.
This commit fixed windows compilation errors `struct
lp_wqueue_s/hp_wqueue_s has an illegal zero-sized array`.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-06-18 13:57:20 +02:00
Ville Juven
b8e30b54ec fs/vfs: Separate file descriptors from file descriptions
This patch is a rework of the NuttX file descriptor implementation. The
goal is two-fold:

1. Improve POSIX compliance. The old implementation tied file description
to inode only, not the file struct. POSIX however dictates otherwise.
2. Fix a bug with descriptor duplication (dup2() and dup3()). There is
an existing race condition with this POSIX API that currently results
in a kernel side crash.

The crash occurs when a partially open / closed file descriptor is
duplicated. The reason for the crash is that even if the descriptor is
closed, the file might still be in use by the kernel (due to e.g. ongoing
write to file). The open file data is changed by file_dup3() and this
causes a crash in the device / drivers themselves as they lose access to
the inode and private data.

The fix is done by separating struct file into file and file descriptor
structs. The file struct can live on even if the descriptor is closed,
fixing the crash. This also fixes the POSIX issue, as two descriptors
can now point to the same file.

Signed-off-by: Ville Juven <ville.juven@unikie.com>
Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
2025-06-12 18:12:42 +08:00
dongjiuzhu1
a12d21e830 fs/file: unify prefix about file_xxx api, like file_open, file_ioctl
old:
fs_getfilep, fs_putfilep, fs_reffilep
new:
file_get, file_put, file_ref

Signed-off-by: dongjiuzhu1 <dongjiuzhu1@xiaomi.com>
2025-06-12 18:12:42 +08:00
ouyangxiangzhen
df183b6682 sched/wqueue: Remove the work_queue_period.
For simplicity, better performance and lower memory-overhead, this commit replaced the periodical workqueue APIs with the more expressive work_queue_next. The work_queue_next restarts work based on the last expiration time.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-06-10 11:02:45 -03:00
ouyangxiangzhen
efe2af643f sched/wdog: Replace periodcial timer with the wd_start_next.
This commit replaced periodical timer with the wd_start_next to improve the timing accuracy.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-06-10 11:02:45 -03:00
ouyangxiangzhen
9d1b958524 sched/wdog: Remove the wd_start_period.
For better simplicity, this commit replaced the periodical wdog APIs with the more expressive wd_start_next. The wd_start_next restarts watchdog timer based on the last expiration time.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-06-10 11:02:45 -03:00
raiden00pl
a8e03eefcd sched: unify Private Types banners
unify Private Types banners according to NuttX coding standard

Signed-off-by: raiden00pl <raiden00@railab.me>
2025-05-28 10:17:15 +08:00
ouyangxiangzhen
947856efe0 sched/wdog: Add max delay tick limitation.
This commit changed the type of the delay ticks to the unsigned, which can reduce the useless branch conditions
Besides, this commit added max delay tick limitation to fix incorrect timing behavior if we delay SCLOCK_MAX in the SMP build.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-05-27 12:10:39 +02:00
ouyangxiangzhen
fce40edb6b sched/wqueue: Add max delay tick limitation.
This commit added max delay tick limitation for the workqueue.

Signed-off-by: ouyangxiangzhen <ouyangxiangzhen@xiaomi.com>
2025-05-27 12:10:39 +02:00
wangzhi16
35a62b7d5e Revert "Reduce the size of tcb by four bytes."
This reverts commit 893c5e92c2.
2025-05-27 16:30:35 +08:00
Lars Kruse
3ce85ca54e style: fix spelling in code comments and strings 2025-05-23 10:48:41 +08:00
Jukka Laitinen
b2315e98c4 sched/semaphore: Always free mutex holder at nxsem_post
There is no need to check the holder structure "counts". There are cases
where the counts may be greater than 1 when several tasks block
on the mutex, but there is always just one holder, which must be freed.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-05-23 01:39:53 +08:00
Jukka Laitinen
f3231a1934 sched/semaphore: Remove redundant clearing of mutex blocking bit in sem_waitirq
This is not a bug, but unnecessary code. If the mutex is no longer blocking,
the released thread will set the holder and clear the blocking bit in the end
of nxsem_wait.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-05-23 01:39:53 +08:00
Jukka Laitinen
b5a284fd6d sched/semaphore: Fix a bug in posting mutex
There was a logical error in setting blocking bit when releasing another thread

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-05-23 01:39:53 +08:00
Jukka Laitinen
6ed21ec1af sched: Remove checking of WDOG_ISACTIVE when cancelling wdog
Checking only adds a race condition. The checking if the wdog is active
or not must be done inside wd_cancel, where the proper spinlock is held

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
2025-05-19 20:34:31 +08:00
Jukka Laitinen
466525891d Revert "sched/wdog/wd_cancel: Return 0 (OK) when cancelling an inactive wdog"
This reverts commit c28c14ad26.
2025-05-16 10:30:41 +08:00