From 4d63921f0a28aeee89b3a2ae861aaa83d731d28d Mon Sep 17 00:00:00 2001 From: hujun5 Date: Fri, 3 Jan 2025 11:30:55 +0800 Subject: [PATCH] use atomic operation for g_system_ticks Signed-off-by: hujun5 --- sched/clock/clock_initialize.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/sched/clock/clock_initialize.c b/sched/clock/clock_initialize.c index 19cf8e0170c15..bb1b9f53173a7 100644 --- a/sched/clock/clock_initialize.c +++ b/sched/clock/clock_initialize.c @@ -373,8 +373,14 @@ void clock_resynchronize(FAR struct timespec *rtc_diff) /* Add the sleep time to correct system timer */ - g_system_ticks += SEC2TICK(rtc_diff->tv_sec); - g_system_ticks += NSEC2TICK(rtc_diff->tv_nsec); + clock_t diff_ticks = SEC2TICK(rtc_diff->tv_sec) + + NSEC2TICK(rtc_diff->tv_nsec); + +#ifdef CONFIG_SYSTEM_TIME64 + atomic64_fetch_add((FAR atomic64_t *)&g_system_ticks, diff_ticks); +#else + atomic_fetch_add((FAR atomic_t *)&g_system_ticks, diff_ticks); +#endif } skip: @@ -398,6 +404,10 @@ void clock_timer(void) { /* Increment the per-tick system counter */ - g_system_ticks++; +#ifdef CONFIG_SYSTEM_TIME64 + atomic64_fetch_add((FAR atomic64_t *)&g_system_ticks, 1); +#else + atomic_fetch_add((FAR atomic_t *)&g_system_ticks, 1); +#endif } #endif