nuttx/sched/clock
Alan Carvalho de Assis 91008cf1b1 sched/clock: keep the seqlock sequence in uint32_t
clock_get_sched_ticks() stored the value of read_seqbegin(), a
uint32_t, in an unsigned int and passed it back to read_seqretry().
Where int is 16 bits the copy is truncated, so once the 32-bit
sequence number passes 65535 read_seqretry() always reports a change
and the loop never ends.  The sequence advances once per tick, so after
65536 ticks (11 minutes at 100 Hz) the next caller, the timer interrupt
itself, spins forever with interrupts disabled and the system stops.

Seen on the CDP1802 (16-bit int): NSH stopped answering after 55
minutes at 20 Hz.  AVR has the same problem.  hrtimer's readers of the
same lock already use uint32_t. Don't assume int is 32-bit :-D

Signed-off-by: Alan Carvalho de Assis <acassis@gmail.com>
Assisted-by: Claude Opus 5.5 (claude-opus-5-5)
2026-10-01 10:17:21 -03:00
..
clock.c !sys/types.h: change time_t and clock_t to int64_t to align with other OSes 2026-05-19 16:21:28 +08:00
clock.h !compiler: drop CONFIG_HAVE_LONG_LONG and require long long support 2026-05-19 16:21:28 +08:00
clock_adjtime.c sched/clock: Avoid duplicate adjtime implementation. 2026-09-13 11:12:56 +08:00
clock_delay.c sched/clock/clock_delay: added config flag to remove weak up_udelay 2026-06-12 09:55:11 -04:00
clock_getres.c sched/clock: Normalize CLOCK_FD getres errors. 2026-09-16 00:04:02 +08:00
clock_gettime.c sched/clock: fix stale CLOCK_MONOTONIC on SCHED_TICKLESS 2026-08-21 02:16:04 +08:00
clock_initialize.c !sys/types.h: change time_t and clock_t to int64_t to align with other OSes 2026-05-19 16:21:28 +08:00
clock_notifier.c fs/timerfd: implement TFD_TIMER_CANCEL_ON_SET to detect clock changes 2026-01-30 17:20:24 +08:00
clock_perf.c arch/armv7-r: userspace PMU access 2026-02-02 16:20:39 +01:00
clock_realtime2absticks.c include/debug.h: Move to include/nuttx/debug.h 2026-04-07 07:50:06 -03:00
clock_sched_ticks.c sched/clock: keep the seqlock sequence in uint32_t 2026-10-01 10:17:21 -03:00
clock_settime.c sched/clock: Keep RTC synchronized with timekeeping. 2026-09-16 00:04:02 +08:00
clock_systime_ticks.c sched/clock: Remove unnecessary preprocessor definition 2025-12-12 12:31:16 +08:00
clock_systime_timespec.c sched/clock: Improve clock implementation with sched ticks functions 2025-10-18 20:07:59 +08:00
clock_timekeeping.c sched/clock: update wall time on tickless tick and support slew limit PPM 2026-09-18 09:30:22 +08:00
clock_timekeeping.h sched: migrate to SPDX identifier 2024-09-12 01:10:14 +08:00
CMakeLists.txt arch/delays: Invalid default value for BOARD_LOOPSPERMSEC 2026-02-25 15:00:03 -03:00
Make.defs arch/delays: Invalid default value for BOARD_LOOPSPERMSEC 2026-02-25 15:00:03 -03:00