No need to continue test example if tick is lost. It means that
actual timer resolution is worse than expected. The default timer
resolution is set 10ms, that is equal to jiffy on most systems.
The default resolution is set bearing in mind that on a CPU runs
maximum two threads that ideally fits in 10ms. But user can change
it to be smaller, in case if CPU0 is isolated and handles the timer
ticks. This patch saves user from incorrect choice by aborting
the application.

Signed-off-by: Ivan Khoronzhuk <[email protected]>
---
 platform/linux-generic/odp_timer.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/platform/linux-generic/odp_timer.c 
b/platform/linux-generic/odp_timer.c
index e8f0267..3728ac3 100644
--- a/platform/linux-generic/odp_timer.c
+++ b/platform/linux-generic/odp_timer.c
@@ -632,7 +632,14 @@ static unsigned odp_timer_pool_expire(odp_timer_pool_t 
tpid, uint64_t tick)
 
 static void timer_notify(sigval_t sigval)
 {
+       uint64_t overrun;
        odp_timer_pool *tp = (odp_timer_pool *)sigval.sival_ptr;
+
+       overrun = timer_getoverrun(tp->timerid);
+       if (overrun)
+               ODP_ABORT("Error: need to increase resolution, lost tickets: %"
+                         PRIu64"\n", overrun);
+
 #ifdef __ARM_ARCH
        odp_timer *array = &tp->timers[0];
        uint32_t i;
-- 
1.9.1

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to