aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/odp_timer.c
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2019-09-26 14:39:48 +0300
committerPetri Savolainen <petri.savolainen@nokia.com>2019-10-02 16:20:59 +0300
commit79a8bfe88fc65864bd30a9d856c39a657334a843 (patch)
tree88af64a64b69905be8f207c0c4a581bcbd5b4b5a /platform/linux-generic/odp_timer.c
parent216e7ca52f92bf5ea4a0c82e38cc60e24885fa95 (diff)
linux-gen: timer: read time once per scan
Read time register once and use the same time value for all timer pools and rate limit comparison. Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> Reviewed-by: Matias Elo <matias.elo@nokia.com>
Diffstat (limited to 'platform/linux-generic/odp_timer.c')
-rw-r--r--platform/linux-generic/odp_timer.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/platform/linux-generic/odp_timer.c b/platform/linux-generic/odp_timer.c
index cffe077b3..d9e35dd5d 100644
--- a/platform/linux-generic/odp_timer.c
+++ b/platform/linux-generic/odp_timer.c
@@ -875,17 +875,23 @@ static inline void timer_pool_scan(timer_pool_t *tp, uint64_t tick)
* Inline timer processing
*****************************************************************************/
+static inline uint64_t time_nsec(timer_pool_t *tp, odp_time_t now)
+{
+ odp_time_t start = tp->start_time;
+
+ return odp_time_diff_ns(now, start);
+}
+
static inline uint64_t current_nsec(timer_pool_t *tp)
{
- odp_time_t now, start;
+ odp_time_t now;
now = odp_time_global();
- start = tp->start_time;
- return odp_time_diff_ns(now, start);
+ return time_nsec(tp, now);
}
-static inline void timer_pool_scan_inline(int num)
+static inline void timer_pool_scan_inline(int num, odp_time_t now)
{
timer_pool_t *tp;
uint64_t new_tick, old_tick, nsec;
@@ -898,7 +904,7 @@ static inline void timer_pool_scan_inline(int num)
if (tp == NULL)
continue;
- nsec = current_nsec(tp);
+ nsec = time_nsec(tp, now);
new_tick = nsec / tp->nsec_per_scan;
old_tick = odp_atomic_load_u64(&tp->cur_tick);
diff = new_tick - old_tick;
@@ -948,7 +954,7 @@ void _timer_run_inline(int dec)
last_timer_run = now;
/* Check the timer pools. */
- timer_pool_scan_inline(num);
+ timer_pool_scan_inline(num, now);
}
/******************************************************************************