diff options
author | Petri Savolainen <petri.savolainen@nokia.com> | 2019-09-26 14:39:48 +0300 |
---|---|---|
committer | Petri Savolainen <petri.savolainen@nokia.com> | 2019-10-02 16:20:59 +0300 |
commit | 79a8bfe88fc65864bd30a9d856c39a657334a843 (patch) | |
tree | 88af64a64b69905be8f207c0c4a581bcbd5b4b5a /platform/linux-generic/odp_timer.c | |
parent | 216e7ca52f92bf5ea4a0c82e38cc60e24885fa95 (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.c | 18 |
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); } /****************************************************************************** |