From d2c19a0535306750c2690a5d5fb31b44cbefdc21 Mon Sep 17 00:00:00 2001 From: Dmitrii Golovanov Date: Tue, 24 Dec 2024 19:46:16 +0100 Subject: [PATCH] arch: nios2: timing: Fix timing cycles rollover Fix arch_timing_cycles_get() to prevent overflow on the clock rollover. The issue is observable on tests/benchmarks/wait_queues and tests/benchmarks/sched_queues with BENCHMARK_NUM_ITERATIONS is large enough, e.g. default 1000. Signed-off-by: Dmitrii Golovanov --- arch/nios2/core/timing.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/arch/nios2/core/timing.c b/arch/nios2/core/timing.c index 9deb469a07f..80ee73c6f06 100644 --- a/arch/nios2/core/timing.c +++ b/arch/nios2/core/timing.c @@ -41,7 +41,13 @@ timing_t arch_timing_counter_get(void) uint64_t arch_timing_cycles_get(volatile timing_t *const start, volatile timing_t *const end) { - return (*end - *start); + timing_t start_ = *start; + timing_t end_ = *end; + + if (end_ >= start_) { + return (end_ - start_); + } + return (end_ + NIOS2_SUBTRACT_CLOCK_CYCLES(start_)); } uint64_t arch_timing_freq_get(void)